Google শীট #3 সহ অ্যাপস স্ক্রিপ্টের মৌলিক বিষয়: ডেটার সাথে কাজ করা

1। পরিচিতি

Google Sheets কোডল্যাব প্লেলিস্ট সহ অ্যাপস্ স্ক্রিপ্টের মৌলিক বিষয়গুলির তৃতীয় অংশে স্বাগতম৷

এই কোডল্যাবটি সম্পূর্ণ করার মাধ্যমে, আপনি আপনার পত্রকের অভিজ্ঞতা উন্নত করতে অ্যাপস স্ক্রিপ্টে ডেটা ম্যানিপুলেশন, কাস্টম মেনু এবং সর্বজনীন API ডেটা পুনরুদ্ধার কীভাবে ব্যবহার করবেন তা শিখতে পারেন। আপনি SpreadsheetApp , Spreadsheet , Sheet , এবং Range ক্লাসের সাথে কাজ চালিয়ে যাবেন এই প্লেলিস্টের পূর্ববর্তী কোডল্যাবগুলি চালু করা হয়েছে৷

আপনি কি শিখবেন

  • ড্রাইভে একটি ব্যক্তিগত বা শেয়ার্ড স্প্রেডশীট থেকে ডেটা কীভাবে আমদানি করবেন।
  • কিভাবে onOpen() ফাংশন দিয়ে একটি কাস্টম মেনু তৈরি করবেন।
  • গুগল শীট কক্ষে স্ট্রিং ডেটা মানগুলিকে কীভাবে পার্স এবং ম্যানিপুলেট করবেন।
  • কিভাবে একটি পাবলিক API উৎস থেকে JSON অবজেক্ট ডেটা টান এবং ম্যানিপুলেট করবেন।

তুমি শুরু করার আগে

Google শীট প্লেলিস্ট সহ অ্যাপস্ স্ক্রিপ্টের মৌলিক বিষয়গুলির মধ্যে এটি তৃতীয় কোডল্যাব৷ এই কোডল্যাব শুরু করার আগে, পূর্ববর্তী কোডল্যাবগুলি সম্পূর্ণ করতে ভুলবেন না:

  1. ম্যাক্রো এবং কাস্টম ফাংশন
  2. স্প্রেডশীট, শীট, এবং রেঞ্জ

আপনি কি প্রয়োজন হবে

  • এই প্লেলিস্টের পূর্ববর্তী কোডল্যাবগুলিতে অন্বেষণ করা প্রাথমিক Apps স্ক্রিপ্ট বিষয়গুলির একটি বোঝাপড়া৷
  • অ্যাপস স্ক্রিপ্ট সম্পাদকের সাথে প্রাথমিক পরিচিতি
  • Google পত্রকের সাথে প্রাথমিক পরিচিতি
  • পত্রক A1 স্বরলিপি পড়ার ক্ষমতা
  • জাভাস্ক্রিপ্ট এবং এর String ক্লাসের সাথে প্রাথমিক পরিচিতি

2. সেট আপ করুন

এই কোডল্যাবের অনুশীলনে কাজ করার জন্য একটি স্প্রেডশীট প্রয়োজন৷ এই অনুশীলনে ব্যবহার করার জন্য একটি স্প্রেডশীট তৈরি করতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনার Google ড্রাইভে একটি স্প্রেডশীট তৈরি করুন৷ আপনি নতুন > Google পত্রক নির্বাচন করে ড্রাইভ ইন্টারফেস থেকে এটি করতে পারেন। এটি আপনার নতুন স্প্রেডশীট তৈরি করে এবং খোলে। ফাইলটি আপনার ড্রাইভ ফোল্ডারে সংরক্ষণ করা হয়েছে৷
  2. স্প্রেডশীট শিরোনামে ক্লিক করুন এবং "শিরোনামহীন স্প্রেডশীট" থেকে "ডেটা ম্যানিপুলেশন এবং কাস্টম মেনু" এ পরিবর্তন করুন। আপনার শীট এই মত দেখতে হবে:

545c02912de7d112.png

  1. স্ক্রিপ্ট সম্পাদক খুলতে, এক্সটেনশন > Apps স্ক্রিপ্ট ক্লিক করুন
  2. অ্যাপস স্ক্রিপ্ট প্রকল্পের শিরোনামে ক্লিক করুন এবং এটিকে "শিরোনামহীন প্রকল্প" থেকে "ডেটা ম্যানিপুলেশন এবং কাস্টম মেনুতে" পরিবর্তন করুন। শিরোনাম পরিবর্তন সংরক্ষণ করতে পুনঃনামকরণ ক্লিক করুন.

একটি ফাঁকা স্প্রেডশীট এবং প্রকল্প সহ, আপনি ল্যাব শুরু করতে প্রস্তুত৷ কাস্টম মেনু সম্পর্কে শেখা শুরু করতে পরবর্তী বিভাগে যান।

3. ওভারভিউ: একটি কাস্টম মেনু আইটেম সহ ডেটা আমদানি করুন

অ্যাপস স্ক্রিপ্ট আপনাকে কাস্টম মেনুগুলি সংজ্ঞায়িত করার ক্ষমতা দেয় যা Google পত্রকগুলিতে উপস্থিত হতে পারে৷ এছাড়াও আপনি Google ডক্স, Google স্লাইড এবং Google ফর্মগুলিতে কাস্টম মেনু ব্যবহার করতে পারেন৷ আপনি যখন একটি কাস্টম মেনু আইটেম সংজ্ঞায়িত করেন, তখন আপনি একটি পাঠ্য লেবেল তৈরি করেন এবং এটিকে আপনার স্ক্রিপ্ট প্রকল্পে একটি Apps স্ক্রিপ্ট ফাংশনের সাথে সংযুক্ত করেন৷ তারপরে আপনি মেনুটি UI এ যোগ করতে পারেন যাতে এটি Google পত্রকগুলিতে প্রদর্শিত হয়:

d6b694da6b8c6783.png

যখন একজন ব্যবহারকারী একটি কাস্টম মেনু আইটেম ক্লিক করেন, তখন আপনি এটির সাথে যুক্ত অ্যাপস স্ক্রিপ্ট ফাংশনটি কার্যকর করে। স্ক্রিপ্ট এডিটর না খুলেই অ্যাপস স্ক্রিপ্ট ফাংশন চালানোর এটি একটি দ্রুত উপায়। এটি স্প্রেডশীটের অন্যান্য ব্যবহারকারীদের এটি কীভাবে বা অ্যাপস স্ক্রিপ্ট কীভাবে কাজ করে সে সম্পর্কে কিছু না জেনেই আপনার কোড চালানোর অনুমতি দেয়। তাদের জন্য, এটা শুধু অন্য মেনু আইটেম.

কাস্টম মেনু আইটেমগুলি onOpen() সাধারণ ট্রিগার ফাংশনে সংজ্ঞায়িত করা হয়েছে, যা আপনি পরবর্তী বিভাগে শিখবেন।

4. onOpen() ফাংশন

অ্যাপস স্ক্রিপ্টে সাধারণ ট্রিগারগুলি নির্দিষ্ট শর্ত বা ইভেন্টের প্রতিক্রিয়া হিসাবে নির্দিষ্ট অ্যাপস স্ক্রিপ্ট কোড চালানোর একটি উপায় প্রদান করে। আপনি যখন একটি ট্রিগার তৈরি করেন, তখন আপনি সংজ্ঞায়িত করেন যে কোন ইভেন্টটি ট্রিগারটি ফায়ার করে এবং একটি Apps স্ক্রিপ্ট ফাংশন প্রদান করে যা ইভেন্টের জন্য চলে।

onOpen() একটি সাধারণ ট্রিগারের উদাহরণ। সেগুলি সেট আপ করা সহজ—আপনাকে যা করতে হবে তা হল onOpen() নামে একটি অ্যাপস স্ক্রিপ্ট ফাংশন লিখতে হবে এবং প্রতিবার সংশ্লিষ্ট স্প্রেডশীট খোলা বা পুনরায় লোড করার সময় অ্যাপস স্ক্রিপ্ট এটি চালায়:

/**
 * A special function that runs when the spreadsheet is first
 * opened or reloaded. onOpen() is used to add custom menu
 * items to the spreadsheet.
 */
function onOpen() {
 /* ... */ 
}

বাস্তবায়ন

আসুন একটি কাস্টম মেনু তৈরি করি।

  1. আপনার স্ক্রিপ্ট প্রকল্পের কোডটি নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:
/**
 * A special function that runs when the spreadsheet is first
 * opened or reloaded. onOpen() is used to add custom menu
 * items to the spreadsheet.
 */
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Book-list')
    .addItem('Load Book-list', 'loadBookList')
    .addToUi();
}
  1. আপনার স্ক্রিপ্ট প্রকল্প সংরক্ষণ করুন.

কোড পূনর্বিবেচনা

এটি কিভাবে কাজ করে তা বোঝার জন্য আসুন এই কোডটি পর্যালোচনা করি। onOpen() এ, প্রথম লাইনটি একটি Ui অবজেক্ট অর্জন করতে getUi() পদ্ধতি ব্যবহার করে যা এই স্ক্রিপ্টের সাথে আবদ্ধ সক্রিয় স্প্রেডশীটের ব্যবহারকারী ইন্টারফেসের প্রতিনিধিত্ব করে।

পরবর্তী তিনটি লাইন মেনু তৈরি করে ( Book-list ), সেই মেনুতে একটি মেনু আইটেম ( Load Book-list ) যোগ করে এবং তারপর স্প্রেডশীটের ইন্টারফেসে মেনু যোগ করে। এটি createMenu(caption) , addItem(caption, functionName) এবং addToUi() পদ্ধতির সাহায্যে করা হয়।

addItem(caption, functionName) পদ্ধতি মেনু আইটেম লেবেল এবং Apps স্ক্রিপ্ট ফাংশনের মধ্যে একটি সংযোগ তৈরি করে যা মেনু আইটেমটি নির্বাচন করা হলে চলে। এই ক্ষেত্রে, Load Book-list মেনু আইটেম নির্বাচন করার ফলে পত্রক loadBookList() ফাংশন (যা এখনও বিদ্যমান নেই) চালানোর চেষ্টা করে।

ফলাফল

এটি কাজ করে তা দেখতে এখন এই ফাংশনটি চালান:

  1. Google পত্রকগুলিতে, আপনার স্প্রেডশীট পুনরায় লোড করুন৷ দ্রষ্টব্য: এটি সাধারণত আপনার স্ক্রিপ্ট সম্পাদকের সাথে ট্যাবটি বন্ধ করে দেয়।
  2. টুলস > স্ক্রিপ্ট এডিটর নির্বাচন করে আপনার স্ক্রিপ্ট এডিটর পুনরায় খুলুন।

আপনার স্প্রেডশীট পুনরায় লোড হওয়ার পরে, নতুন Book-list মেনু আপনার মেনু বারে উপস্থিত হওয়া উচিত:

687dfb214f2930ba.png

Book-list এ ক্লিক করে, আপনি ফলাফল মেনু দেখতে পারেন:

8a4a391fbabcb16a.png

পরবর্তী বিভাগটি loadBookList() ফাংশনের জন্য কোড তৈরি করে এবং অ্যাপস স্ক্রিপ্টে ডেটার সাথে ইন্টারঅ্যাক্ট করার একটি উপায় উপস্থাপন করে: অন্যান্য স্প্রেডশীট পড়া।

5. স্প্রেডশীট ডেটা আমদানি করুন

এখন আপনি একটি কাস্টম মেনু তৈরি করেছেন, আপনি এমন ফাংশন তৈরি করতে পারেন যা মেনু আইটেমটি ক্লিক করে চালানো যেতে পারে।

এই মুহূর্তে, কাস্টম মেনু Book-list একটি মেনু আইটেম আছে: Load Book-list. আপনি যখন Load Book-list মেনু আইটেম, loadBookList(), নির্বাচন করেন তখন যে ফাংশনটি বলা হয়, সেটি আপনার স্ক্রিপ্টে বিদ্যমান নেই, তাই Book-list > Load Book-list নির্বাচন করলে একটি ত্রুটি দেখা দেয়:

b94dcef066e7041d.gif

আপনি loadBookList() ফাংশন প্রয়োগ করে এই ত্রুটিটি ঠিক করতে পারেন।

বাস্তবায়ন

আপনি নতুন মেনু আইটেমটি স্প্রেডশীটটিতে কাজ করার জন্য ডেটা দিয়ে পূরণ করতে চান, তাই আপনি অন্য স্প্রেডশীট থেকে বইয়ের ডেটা পড়ার জন্য loadBookList() প্রয়োগ করবেন এবং এটিকে এটিতে অনুলিপি করবেন:

  1. onOpen() অধীনে আপনার স্ক্রিপ্টে নিম্নলিখিত কোড যোগ করুন:
/** 
 * Creates a template book list based on the
 * provided 'codelab-book-list' sheet.
 */
function loadBookList(){
  // Gets the active sheet.
  var sheet = SpreadsheetApp.getActiveSheet();
  
  // Gets a different spreadsheet from Drive using
  // the spreadsheet's ID. 
  var bookSS = SpreadsheetApp.openById(
    "1c0GvbVUDeBmhTpq_A3vJh2xsebtLuwGwpBYqcOBqGvo" 
  );

  // Gets the sheet, data range, and values of the
  // spreadsheet stored in bookSS.
  var bookSheet = bookSS.getSheetByName("codelab-book-list");
  var bookRange = bookSheet.getDataRange();
  var bookListValues = bookRange.getValues();

  // Add those values to the active sheet in the current
  // spreadsheet. This overwrites any values already there.
  sheet.getRange(1, 1, bookRange.getHeight(), bookRange.getWidth()) 
    .setValues(bookListValues);
  
  // Rename the destination sheet and resize the data
  // columns for easier reading.
  sheet.setName("Book-list");
  sheet.autoResizeColumns(1, 3);
}
  1. আপনার স্ক্রিপ্ট প্রকল্প সংরক্ষণ করুন.

কোড পূনর্বিবেচনা

তাই কিভাবে এই ফাংশন কাজ করে? loadBookList() ফাংশনটি প্রাথমিকভাবে Spreadsheet , Sheet এবং Range ক্লাস থেকে পদ্ধতি ব্যবহার করে যা পূর্ববর্তী কোডল্যাবগুলি চালু করা হয়েছিল। এই ধারণাগুলি মাথায় রেখে, আপনি loadBookList() নিম্নলিখিত চারটি বিভাগে ভেঙে দিতে পারেন:

1: গন্তব্য শীট সনাক্ত করুন

প্রথম লাইনটি বর্তমান শীট অবজেক্টের একটি রেফারেন্স পেতে SpreadsheetApp.getActiveSheet() ব্যবহার করে এবং এটি পরিবর্তনশীল sheet সংরক্ষণ করে। এটি সেই শীট যেখানে ডেটা কপি করা হবে।

2: উৎস তথ্য সনাক্ত করুন

পরবর্তী কয়েকটি লাইন চারটি ভেরিয়েবল স্থাপন করে যা আপনি যে উৎস ডেটা পুনরুদ্ধার করছেন তা উল্লেখ করে:

  • bookSS স্প্রেডশীটের একটি রেফারেন্স সংরক্ষণ করে যে কোডটি থেকে ডেটা পড়ছে। কোডটি স্প্রেডশীট আইডি দ্বারা স্প্রেডশীট খুঁজে পায়। এই উদাহরণে, আমরা একটি উৎস স্প্রেডশীটের ID প্রদান করেছি যা থেকে পড়ার জন্য এবং স্প্রেডশীট অ্যাপ. SpreadsheetApp.openById(id) খুলুন।
  • bookSheet bookSS মধ্যে একটি শীটের একটি রেফারেন্স সঞ্চয় করে যাতে আপনার পছন্দের ডেটা থাকে। কোডটি তার নাম, codelab-book-list দ্বারা পড়ার জন্য শীটটিকে সনাক্ত করে।
  • bookRange bookSheet ডেটার একটি রেফারেন্স সংরক্ষণ করে। Sheet.getDataRange() পদ্ধতিটি শীটের সমস্ত অ-খালি ঘর সমন্বিত পরিসর প্রদান করে। এটি নিশ্চিত করার একটি সহজ উপায় যে আপনি খালি সারি এবং কলামগুলি অন্তর্ভুক্ত না করে একটি শীটে সমস্ত ডেটা কভার করে একটি পরিসর পান৷
  • bookListValues ​​হল একটি 2D অ্যারে যাতে bookRange ঘর থেকে নেওয়া সমস্ত মান রয়েছে। Range.getValues() পদ্ধতি সোর্স শীট থেকে ডেটা পড়ার মাধ্যমে এই অ্যারে তৈরি করে।

3: উৎস থেকে গন্তব্যে ডেটা কপি করুন

পরবর্তী কোড বিভাগটি bookListValues ​​ডেটাকে sheet অনুলিপি করে এবং তারপর শীটটির নামও পরিবর্তন করে:

  • Sheet.getRange(row, column, numRows, numColumns) sheet ডেটা কোথায় কপি করতে হবে তা সনাক্ত করতে ব্যবহৃত হয়।
  • Range.getHeight() এবং Range.getWidth() পদ্ধতিগুলি ডেটার আকার পরিমাপ করতে এবং একই মাত্রার একটি গন্তব্য পরিসর নির্ধারণ করতে ব্যবহৃত হয়।
  • Range.setValues(values) bookListValues 2D অ্যারেকে গন্তব্য পরিসরে অনুলিপি করে, আগে থেকেই সেখানে থাকা যেকোনো ডেটা ওভাররাইট করে।

4: গন্তব্য শীট ফর্ম্যাট করুন

Sheet.setName(name) গন্তব্য পত্রকের নামকে Book-list এ পরিবর্তন করতে ব্যবহৃত হয়। ফাংশনের শেষ লাইনটি গন্তব্য পত্রকের প্রথম তিনটি কলামের আকার পরিবর্তন করতে Sheet.autoResizeColumns(startColumn, numColumns) ব্যবহার করে, যাতে আপনি নতুন ডেটা আরও সহজে পড়তে পারেন।

ফলাফল

আপনি কর্ম এই ফাংশন দেখতে পারেন. Google Sheets-এ, আপনার স্প্রেডশীট পূরণ করতে ফাংশন চালানোর জন্য Book-list > Load book-list নির্বাচন করুন:

3c797e1e2b9fe641.gif

আপনার কাছে এখন বইয়ের শিরোনাম, লেখক এবং 13-সংখ্যার ISBN নম্বরগুলির একটি তালিকা সহ একটি শীট রয়েছে৷ পরবর্তী বিভাগে, আপনি শিখবেন কিভাবে স্ট্রিং ম্যানিপুলেশন এবং কাস্টম মেনু ব্যবহার করে এই বইয়ের তালিকার ডেটা পরিবর্তন ও আপডেট করতে হয়।

6. ওভারভিউ: স্প্রেডশীট ডেটা পরিষ্কার করুন

আপনি এখন আপনার শীটে বই তথ্য আছে. প্রতিটি সারি একটি নির্দিষ্ট বইকে নির্দেশ করে, এর শিরোনাম, লেখক এবং আইএসবিএন নম্বর আলাদা কলামে তালিকাভুক্ত করে। যাইহোক, আপনি এই কাঁচা ডেটার সাথে কিছু সমস্যাও দেখতে পারেন:

  1. কিছু সারির জন্য, শিরোনাম এবং লেখক একসাথে শিরোনাম কলামে স্থাপন করা হয়, একটি কমা বা স্ট্রিং " দ্বারা " দ্বারা সংযুক্ত।
  2. কিছু সারি বইয়ের শিরোনাম বা লেখক অনুপস্থিত.

পরবর্তী বিভাগগুলিতে, আপনি ডেটা পরিষ্কার করে এই সমস্যাগুলি সংশোধন করবেন৷ প্রথম ইস্যুটির জন্য, আপনি এমন ফাংশন তৈরি করবেন যা শিরোনাম কলামটি পড়বে এবং যখনই একটি কমা বা "দ্বারা" বিভেদক পাওয়া যাবে তখন পাঠ্যটিকে বিভক্ত করবে, সংশ্লিষ্ট লেখক এবং শিরোনাম সাবস্ট্রিংগুলিকে সঠিক কলামগুলিতে স্থাপন করবে। দ্বিতীয় সমস্যাটির জন্য, আপনি এমন কোড লিখবেন যা স্বয়ংক্রিয়ভাবে একটি বহিরাগত API ব্যবহার করে অনুপস্থিত বইয়ের তথ্য অনুসন্ধান করে এবং সেই তথ্যটি আপনার শীটে যোগ করে।

7. মেনু আইটেম যোগ করুন

আপনি যে ডেটা ক্লিনিং অপারেশনগুলি বাস্তবায়ন করবেন তা নিয়ন্ত্রণ করতে আপনি তিনটি মেনু আইটেম তৈরি করতে চাইবেন।

বাস্তবায়ন

আপনার প্রয়োজনীয় অতিরিক্ত মেনু আইটেমগুলি অন্তর্ভুক্ত করতে onOpen() -এ আপডেট করা যাক। নিম্নলিখিতগুলি করুন:

  1. আপনার স্ক্রিপ্ট প্রকল্পে, নিম্নলিখিতগুলির সাথে মেলে আপনার onOpen() কোড আপডেট করুন:
/**
 * A special function that runs when the spreadsheet is first
 * opened or reloaded. onOpen() is used to add custom menu
 * items to the spreadsheet.
 */
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Book-list')
    .addItem('Load Book-list', 'loadBookList')
    .addSeparator()
    .addItem(
      'Separate title/author at first comma', 'splitAtFirstComma')
    .addItem(
      'Separate title/author at last "by"', 'splitAtLastBy')
    .addSeparator()
    .addItem(
      'Fill in blank titles and author cells', 'fillInTheBlanks')
    .addToUi();
}
  1. আপনার স্ক্রিপ্ট প্রকল্প সংরক্ষণ করুন.
  2. স্ক্রিপ্ট এডিটরে, ফাংশন তালিকা থেকে onOpen নির্বাচন করুন এবং Run এ ক্লিক করুন। এটি স্প্রেডশীট মেনু পুনর্নির্মাণ করতে onOpen() চালু হবে যাতে আপনাকে স্প্রেডশীট পুনরায় লোড করতে হবে না।

এই নতুন কোডে, Menu.addSeparator() পদ্ধতিটি মেনুতে একটি অনুভূমিক বিভাজক তৈরি করে যাতে সংশ্লিষ্ট মেনু আইটেমগুলির গ্রুপগুলিকে দৃশ্যত সংগঠিত রাখা যায়। নতুন মেনু আইটেমগুলি তারপর এটির নীচে যোগ করা হয়, লেবেলগুলির সাথে Separate title/author at first comma Separate title/author at last "by" Fill in blank titles and author cells

ফলাফল

আপনার স্প্রেডশীটে, নতুন মেনু আইটেমগুলি দেখতে Book-list মেনুতে ক্লিক করুন:

580c806ce8fd4872.png

এই নতুন আইটেমগুলিতে ক্লিক করার ফলে একটি ত্রুটি দেখা দেয় যেহেতু আপনি তাদের সংশ্লিষ্ট ফাংশনগুলি প্রয়োগ করেননি, তাই আসুন এটি পরবর্তী করি।

8. কমা ডিলিমিটারে পাঠ্য বিভক্ত করুন

আপনার স্প্রেডশীটে আপনি যে ডেটাসেট আমদানি করেছেন তাতে কয়েকটি কক্ষ রয়েছে যেখানে লেখক এবং শিরোনাম একটি কমা ব্যবহার করে একটি কক্ষে ভুলভাবে একত্রিত হয়েছে:

ca91c43c4e51d6b5.png

পাঠ্য স্ট্রিংগুলিকে পৃথক কলামে বিভক্ত করা একটি সাধারণ স্প্রেডশীট কাজ। Google পত্রক একটি SPLIT() ফাংশন প্রদান করে যা স্ট্রিংকে কলামে বিভক্ত করে। যাইহোক, ডেটাসেটগুলিতে প্রায়শই এমন সমস্যা থাকে যা শীটের অন্তর্নির্মিত ফাংশনগুলির সাথে সহজে সমাধান করা যায় না। এই ক্ষেত্রে, আপনার ডেটা পরিষ্কার এবং সংগঠিত করার জন্য প্রয়োজনীয় জটিল ক্রিয়াকলাপগুলি করতে আপনি Apps স্ক্রিপ্ট কোড লিখতে পারেন৷

প্রথমে splitAtFirstComma() নামে একটি ফাংশন প্রয়োগ করে আপনার ডেটা পরিষ্কার করা শুরু করুন যা কমা পাওয়া গেলে লেখক এবং শিরোনামকে তাদের নিজ নিজ কক্ষে ভাগ করে।

splitAtFirstComma() ফাংশন নিম্নলিখিত পদক্ষেপ নিতে হবে:

  1. বর্তমানে নির্বাচিত কক্ষের প্রতিনিধিত্বকারী পরিসর পান।
  2. পরিসরের ঘরগুলিতে কমা আছে কিনা তা পরীক্ষা করুন৷
  3. যেখানে কমা পাওয়া যায়, প্রথম কমার অবস্থানে স্ট্রিংটিকে দুটি (এবং শুধুমাত্র দুটি) সাবস্ট্রিংয়ে বিভক্ত করুন। জিনিসগুলিকে সহজ করার জন্য, আপনি ধরে নিতে পারেন যে কোনও কমা একটি " [লেখক], [শিরোনাম] " স্ট্রিং প্যাটার্ন নির্দেশ করে। আপনি অনুমান করতে পারেন যদি ঘরে একাধিক কমা উপস্থিত হয়, তবে স্ট্রিংয়ের প্রথম কমাতে বিভক্ত করা উপযুক্ত।
  4. সংশ্লিষ্ট শিরোনাম এবং লেখক কক্ষের নতুন বিষয়বস্তু হিসাবে সাবস্ট্রিংগুলি সেট করুন।

বাস্তবায়ন

এই পদক্ষেপগুলি বাস্তবায়ন করতে, আপনি একই স্প্রেডশীট পরিষেবা পদ্ধতিগুলি ব্যবহার করবেন যা আপনি আগে ব্যবহার করেছেন, তবে স্ট্রিং ডেটা ম্যানিপুলেট করার জন্য আপনাকে জাভাস্ক্রিপ্টও ব্যবহার করতে হবে৷ নিম্নলিখিত পদক্ষেপ নিন:

  1. Apps স্ক্রিপ্ট সম্পাদকে, আপনার স্ক্রিপ্ট প্রকল্পের শেষে নিম্নলিখিত ফাংশন যোগ করুন:
/**
 * Reformats title and author columns by splitting the title column
 * at the first comma, if present.
 */
function splitAtFirstComma(){
  // Get the active (currently highlighted) range.
  var activeRange = SpreadsheetApp.getActiveRange();
  var titleAuthorRange = activeRange.offset(
    0, 0, activeRange.getHeight(), activeRange.getWidth() + 1);

  // Get the current values of the selected title column cells.
  // This is a 2D array.
  var titleAuthorValues = titleAuthorRange.getValues();

  // Update values where commas are found. Assumes the presence
  // of a comma indicates an "authors, title" pattern.
  for (var row = 0; row < titleAuthorValues.length; row++){
    var indexOfFirstComma =
        titleAuthorValues[row][0].indexOf(", ");

    if(indexOfFirstComma >= 0){
      // Found a comma, so split and update the values in
      // the values array.
      var titlesAndAuthors = titleAuthorValues[row][0];

      // Update the title value in the array.
      titleAuthorValues[row][0] =
        titlesAndAuthors.slice(indexOfFirstComma + 2);

      // Update the author value in the array.
      titleAuthorValues[row][1] =
        titlesAndAuthors.slice(0, indexOfFirstComma);
    }
  }

  // Put the updated values back into the spreadsheet.
  titleAuthorRange.setValues(titleAuthorValues);
}
  1. আপনার স্ক্রিপ্ট প্রকল্প সংরক্ষণ করুন.

কোড পূনর্বিবেচনা

আসুন তিনটি প্রধান বিভাগ নিয়ে গঠিত নতুন কোডটি পর্যালোচনা করি:

1: হাইলাইট করা শিরোনাম মান পুনরুদ্ধার করুন

প্রথম তিনটি লাইন তিনটি ভেরিয়েবল স্থাপন করে যা শীটে বর্তমান ডেটা উল্লেখ করে:

  • activeRange সেই পরিসরের প্রতিনিধিত্ব করে যা ব্যবহারকারী বর্তমানে হাইলাইট করেছে যখন splitAtFirstComma() ফাংশন কল করা হয়েছিল। এই ব্যায়ামটিকে সহজ রাখার জন্য, আমরা অনুমান করতে পারি যে কলাম A-তে সেলগুলি হাইলাইট করার সময় ব্যবহারকারী শুধুমাত্র এটি করে।
  • titleAuthorRange একটি নতুন পরিসরের প্রতিনিধিত্ব করে যা activeRange এর মতো একই ঘরগুলিকে কভার করে, কিন্তু ডানদিকে আরও একটি কলামও অন্তর্ভুক্ত করে। titleAuthorRange তৈরি করা হয়েছে Range.offset(rowOffset, columnOffset, numRows, numColumns) পদ্ধতি ব্যবহার করে। কোডটির এই বর্ধিত পরিসরের প্রয়োজন কারণ এটি শিরোনাম কলামে খুঁজে পাওয়া যেকোন লেখকদের রাখার জন্য একটি জায়গার প্রয়োজন।
  • titleAuthorValues ​​হল Range.getValues() ব্যবহার করে titleAuthorRange থেকে বের করা ডেটার একটি 2D অ্যারে।

2: প্রতিটি শিরোনাম পরীক্ষা করুন এবং পাওয়া প্রথম কমা ডিলিমিটারে বিভক্ত করুন

পরবর্তী বিভাগে কমা খুঁজতে titleAuthorValues এর মানগুলি পরীক্ষা করে। একটি জাভাস্ক্রিপ্ট ফর লুপ titleAuthorValues এর প্রথম কলামের সমস্ত মান পরীক্ষা করতে ব্যবহৃত হয়। যখন JavaScript স্ট্রিং indexOf() পদ্ধতি ব্যবহার করে একটি কমা সাবস্ট্রিং ( ", " ) পাওয়া যায়, কোডটি নিম্নলিখিতগুলি করে:

  1. সেল স্ট্রিং মান titlesAndAuthors ভেরিয়েবলে অনুলিপি করা হয়।
  2. জাভাস্ক্রিপ্ট স্ট্রিং indexOf() পদ্ধতি ব্যবহার করে কমা অবস্থান নির্ধারণ করা হয়।
  3. জাভাস্ক্রিপ্ট স্ট্রিং স্লাইস() পদ্ধতিটিকে কমা ডিলিমিটারের আগে সাবস্ট্রিং এবং ডিলিমিটারের পরে সাবস্ট্রিং পেতে দুবার বলা হয়।
  4. সেই অবস্থানে বিদ্যমান মানগুলিকে ওভাররাইট করে সাবস্ট্রিংগুলি শিরোনামAuthorValues ​​2D অ্যারেতে আবার কপি করা হয়। যেহেতু আমরা একটি " [লেখক], [শিরোনাম] " প্যাটার্ন ধরে নিচ্ছি, তাই প্রথম কলামে শিরোনাম এবং দ্বিতীয় কলামে লেখক রাখার জন্য দুটি সাবস্ট্রিংয়ের ক্রম বিপরীত হয়।

দ্রষ্টব্য: যখন কোডটি একটি কমা খুঁজে পায় না, তখন এটি সারিতে থাকা ডেটা অপরিবর্তিত রাখে।

3: নতুন মানগুলিকে শীটে আবার কপি করুন

একবার সমস্ত শিরোনাম ঘরের মান পরীক্ষা করা হলে, আপডেট করা titleAuthorValues ​​2D অ্যারেটি Range.setValues(values) পদ্ধতি ব্যবহার করে স্প্রেডশীটে আবার কপি করা হয়।

ফলাফল

আপনি এখন splitAtFirstComma() ফাংশনের প্রভাব দেখতে পারেন। নির্বাচন করার পরে প্রথম কমা মেনু আইটেমে পৃথক শিরোনাম/লেখক নির্বাচন করে এটি চালানোর চেষ্টা করুন...

...একটি কোষ:

a24763b60b305376.gif

...অথবা একাধিক কোষ:

89c5c89b357d3713.gif

আপনি এখন একটি Apps স্ক্রিপ্ট ফাংশন তৈরি করেছেন যা পত্রক ডেটা প্রক্রিয়া করে৷ এর পরে, আপনি দ্বিতীয় স্প্লিটার ফাংশনটি বাস্তবায়ন করবেন।

9. "দ্বারা" বিভেদকগুলিতে পাঠ্য বিভক্ত করুন

আসল ডেটা দেখে, আপনি অন্য সমস্যা দেখতে পারেন। ঠিক যেমন কিছু ডেটা একটি একক কক্ষে শিরোনাম এবং লেখককে "[লেখক], [শিরোনাম]" হিসাবে ফর্ম্যাট করে, অন্যান্য কোষগুলি লেখক এবং শিরোনামকে "[লেখক] দ্বারা [শিরোনাম]" হিসাবে ফর্ম্যাট করে :

41f0dd5ac63b62f4.png

বাস্তবায়ন

আপনি splitAtLastBy() নামে একটি ফাংশন তৈরি করে শেষ বিভাগ থেকে একই কৌশল ব্যবহার করে এই সমস্যার সমাধান করতে পারেন। এই ফাংশনটির splitAtFirstComma() এর অনুরূপ কাজ রয়েছে — একমাত্র আসল পার্থক্য হল এটি পাঠ্যের একটি সামান্য ভিন্ন প্যাটার্নের জন্য অনুসন্ধান করছে। নিম্নলিখিত কাজ করে এই ফাংশন বাস্তবায়ন করুন:

  1. Apps স্ক্রিপ্ট সম্পাদকে, আপনার স্ক্রিপ্ট প্রকল্পের শেষে নিম্নলিখিত ফাংশন যোগ করুন:
/** 
 * Reformats title and author columns by splitting the title column
 * at the last instance of the string " by ", if present.
 */
function splitAtLastBy(){
  // Get the active (currently highlighted) range.
  var activeRange = SpreadsheetApp.getActiveRange();
  var titleAuthorRange = activeRange.offset(
    0, 0, activeRange.getHeight(), activeRange.getWidth() + 1);

  // Get the current values of the selected title column cells.
  // This is a 2D array.
  var titleAuthorValues = titleAuthorRange.getValues();

  // Update values where " by " substrings are found. Assumes
  // the presence of a " by " indicates a "title by authors"
  // pattern.
  for(var row = 0; row < titleAuthorValues.length; row++){
    var indexOfLastBy =
        titleAuthorValues[row][0].lastIndexOf(" by ");
    
    if(indexOfLastBy >= 0){
      // Found a " by ", so split and update the values in
      // the values array.
      var titlesAndAuthors = titleAuthorValues[row][0];
      
      // Update the title value in the array.
      titleAuthorValues[row][0] =
        titlesAndAuthors.slice(0, indexOfLastBy);
      
      // Update the author value in the array.
      titleAuthorValues[row][1] =
        titlesAndAuthors.slice(indexOfLastBy + 4);
    }
  }

  // Put the updated values back into the spreadsheet.
  titleAuthorRange.setValues(titleAuthorValues);
}
  1. আপনার স্ক্রিপ্ট প্রকল্প সংরক্ষণ করুন.

কোড পূনর্বিবেচনা

এই কোড এবং splitAtFirstComma() এর মধ্যে কয়েকটি মূল পার্থক্য রয়েছে:

  1. সাবস্ট্রিং " by " একটি স্ট্রিং ডিলিমিটার হিসাবে ব্যবহৃত হয়, " , " এর পরিবর্তে।
  2. এখানে String.indexOf(substring) এর পরিবর্তে JavaScript String.lastIndexOf(substring) String.indexOf(substring) ব্যবহার করা হয়েছে। এর মানে যদি প্রাথমিক স্ট্রিং-এ একাধিক " by " সাবস্ট্রিং থাকে, তবে শেষ " by " ব্যতীত সবগুলোই শিরোনামের অংশ বলে ধরে নেওয়া হয়।
  3. স্ট্রিংটি বিভক্ত করার পরে, প্রথম সাবস্ট্রিংটি শিরোনাম হিসাবে এবং দ্বিতীয়টি লেখক হিসাবে সেট করা হয় (এটি splitAtFirstComma() থেকে বিপরীত ক্রম)।

ফলাফল

আপনি এখন splitAtLastBy() ফাংশনের প্রভাব দেখতে পারেন। নির্বাচন করার পর শেষ "দ্বারা" মেনু আইটেমটিতে পৃথক শিরোনাম/লেখক নির্বাচন করে এটি চালানোর চেষ্টা করুন...

...একটি কোষ:

4e6679e134145975.gif

...অথবা একাধিক কোষ:

3c879c572c61e62f.gif

আপনি কোডল্যাবের এই বিভাগটি সম্পূর্ণ করেছেন। আপনি এখন একটি শীটে স্ট্রিং ডেটা পড়তে এবং সংশোধন করতে Apps Script ব্যবহার করতে পারেন এবং বিভিন্ন Apps Script কমান্ড চালানোর জন্য কাস্টম মেনু ব্যবহার করতে পারেন।

পরবর্তী বিভাগে, আপনি একটি পাবলিক API থেকে প্রাপ্ত ডেটা দিয়ে ফাঁকা কক্ষগুলি পূরণ করে এই ডেটাসেটটিকে আরও উন্নত করতে শিখবেন৷

10. ওভারভিউ: পাবলিক API থেকে ডেটা পান

এখনও অবধি আপনি কিছু শিরোনাম এবং লেখক বিন্যাস সংক্রান্ত সমস্যাগুলি সমাধান করতে আপনার ডেটাসেটকে পরিমার্জন করেছেন, কিন্তু ডেটাসেটটিতে এখনও কিছু তথ্য অনুপস্থিত রয়েছে, নীচের কক্ষগুলিতে হাইলাইট করা হয়েছে:

af0dba8cb09d1a49.png

আপনি বর্তমানে আপনার কাছে থাকা ডেটাতে স্ট্রিং অপারেশন ব্যবহার করে অনুপস্থিত ডেটা পেতে পারবেন না। পরিবর্তে, আপনাকে অন্য উৎস থেকে অনুপস্থিত ডেটা পেতে হবে। আপনি অতিরিক্ত ডেটা প্রদান করতে পারে এমন বহিরাগত API থেকে তথ্যের অনুরোধ করে Apps স্ক্রিপ্টে এটি করতে পারেন।

এপিআই হল অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস । এটি একটি সাধারণ শব্দ, তবে এটি মূলত একটি পরিষেবা যা আপনার প্রোগ্রাম এবং স্ক্রিপ্টগুলি তথ্যের অনুরোধ করতে বা নির্দিষ্ট পদক্ষেপ নিতে কল করতে পারে। এই বিভাগে, আপনি একটি সর্বজনীনভাবে উপলব্ধ API কল করছেন যাতে আপনি বইয়ের তথ্যের জন্য অনুরোধ করতে পারেন যা আপনি আপনার পত্রকের খালি কক্ষগুলিতে সন্নিবেশ করতে পারেন৷

এই বিভাগটি আপনাকে শেখায় কিভাবে:

  • একটি বহিরাগত API উত্স থেকে বই তথ্য অনুরোধ.
  • প্রত্যাবর্তিত ডেটা থেকে শিরোনাম এবং লেখকের তথ্য বের করুন এবং এটি আপনার স্প্রেডশীটে লিখুন।

11. UrlFetch দিয়ে বাহ্যিক ডেটা আনুন

আপনার স্প্রেডশীটের সাথে সরাসরি কাজ করে এমন কোডটি অনুসন্ধান করার আগে, আপনি পাবলিক ওপেন লাইব্রেরি API থেকে বইয়ের তথ্যের অনুরোধ করার জন্য বিশেষভাবে একটি সহায়ক ফাংশন তৈরি করে Apps স্ক্রিপ্টে বাহ্যিক APIগুলির সাথে কাজ করার বিষয়ে শিখতে পারেন৷

আমাদের হেল্পার ফাংশন, fetchBookData_(ISBN) , একটি বইয়ের একটি 13-সংখ্যার ISBN নম্বর একটি প্যারামিটার হিসাবে নেয় এবং সেই বই সম্পর্কে ডেটা প্রদান করে। এটি সংযোগ করে এবং Open Library API থেকে তথ্য পুনরুদ্ধার করে এবং তারপর ফিরে আসা JSON অবজেক্টকে পার্স করে

বাস্তবায়ন

নিম্নলিখিত কাজ করে এই সহায়ক ফাংশন বাস্তবায়ন করুন:

  1. Apps স্ক্রিপ্ট এডিটরে, আপনার স্ক্রিপ্টের শেষে নিম্নলিখিত কোড যোগ করুন:
/**
 * Helper function to retrieve book data from the Open Library
 * public API.
 *
 * @param {number} ISBN - The ISBN number of the book to find.
 * @return {object} The book's data, in JSON format.
 */
function fetchBookData_(ISBN){
  // Connect to the public API.
  var url = "https://openlibrary.org/api/books?bibkeys=ISBN:"
      + ISBN + "&jscmd=details&format=json";
  var response = UrlFetchApp.fetch(
      url, {'muteHttpExceptions': true});
  
  // Make request to API and get response before this point.
  var json = response.getContentText();
  var bookData = JSON.parse(json); 
  
  // Return only the data we're interested in.
  return bookData['ISBN:' + ISBN];
}
  1. আপনার স্ক্রিপ্ট প্রকল্প সংরক্ষণ করুন.

কোড পূনর্বিবেচনা

এই কোডটি দুটি প্রধান বিভাগে বিভক্ত:

1: API অনুরোধ

প্রথম দুটি লাইনে, fetchBookData_(ISBN) API-এর URL এন্ডপয়েন্ট এবং Apps Script-এর URL Fetch পরিষেবা ব্যবহার করে সর্বজনীন ওপেন লাইব্রেরি API-এর সাথে সংযোগ করে।

url ভেরিয়েবল হল শুধুমাত্র একটি URL স্ট্রিং, যেমন একটি ওয়েব ঠিকানা। এটি ওপেন লাইব্রেরি সার্ভারে একটি অবস্থান নির্দেশ করে। এটিতে তিনটি প্যারামিটার ( bibkeys , jscmd , এবং format ) রয়েছে যা ওপেন লাইব্রেরি সার্ভারগুলিকে বলে যে আপনি কোন তথ্যের অনুরোধ করছেন এবং কীভাবে প্রতিক্রিয়া গঠন করবেন৷ এই ক্ষেত্রে, আপনি বইটির ISBN নম্বর প্রদান করুন এবং JSON ফর্ম্যাটে ফেরত দেওয়ার জন্য বিশদ তথ্যের জন্য বলুন।

একবার আপনি URL স্ট্রিং তৈরি করলে, কোডটি অবস্থানে একটি অনুরোধ পাঠায় এবং একটি প্রতিক্রিয়া পায়। এটি UrlFetchApp.fetch(url, params) পদ্ধতিতে করা হয়। এটি আপনার প্রদান করা বাহ্যিক URL-এ একটি তথ্য অনুরোধ পাঠায় এবং response ভেরিয়েবলে ফলাফল সঞ্চয় করে। ইউআরএল ছাড়াও, কোডটি ঐচ্ছিক প্যারামিটার muteHttpExceptions কে true এ সেট করে। এই সেটিং এর অর্থ হল আপনার কোডটি থামবে না যদি অনুরোধের ফলে একটি API ত্রুটি হয়। পরিবর্তে, ত্রুটি প্রতিক্রিয়া ফিরে আসে।

অনুরোধটি একটি HTTPResponse অবজেক্ট প্রদান করে যা response ভেরিয়েবলে সংরক্ষিত থাকে। HTTP প্রতিক্রিয়া একটি প্রতিক্রিয়া কোড, HTTP শিরোনাম, এবং প্রধান প্রতিক্রিয়া বিষয়বস্তু অন্তর্ভুক্ত. এখানে আগ্রহের তথ্য হল প্রধান JSON বিষয়বস্তু, তাই কোডটি অবশ্যই বের করতে হবে এবং তারপর JSON-কে পার্স করে কাঙ্খিত তথ্য খুঁজে বের করতে এবং ফেরত দিতে হবে।

2: API প্রতিক্রিয়া পার্স করুন এবং আগ্রহের তথ্য ফেরত দিন

কোডের শেষ তিনটি লাইনে, HTTPResponse.getContentText() পদ্ধতি একটি স্ট্রিং হিসাবে প্রতিক্রিয়ার মূল বিষয়বস্তু প্রদান করে। এই স্ট্রিংটি JSON ফর্ম্যাটে, কিন্তু ওপেন লাইব্রেরি API সঠিক বিষয়বস্তু এবং বিন্যাস সংজ্ঞায়িত করে। JSON.parse(jsonString) পদ্ধতি JSON স্ট্রিংকে জাভাস্ক্রিপ্ট অবজেক্টে রূপান্তর করে যাতে ডেটার বিভিন্ন অংশ সহজেই বের করা যায়। অবশেষে, ফাংশনটি বইয়ের আইএসবিএন নম্বরের সাথে সম্পর্কিত ডেটা প্রদান করে।

ফলাফল

এখন যেহেতু আপনি fetchBookData_(ISBN) প্রয়োগ করেছেন, আপনার কোডের অন্যান্য ফাংশন যেকোন বইয়ের ISBN নম্বর ব্যবহার করে তথ্য খুঁজে পেতে পারে। আপনি আপনার স্প্রেডশীটের কক্ষগুলি পূরণ করতে সাহায্য করতে এই ফাংশনটি ব্যবহার করবেন৷

12. একটি স্প্রেডশীটে API ডেটা লিখুন

আপনি এখন একটি fillInTheBlanks() ফাংশন বাস্তবায়ন করতে পারেন যা নিম্নলিখিতগুলি করে:

  1. সক্রিয় ডেটা পরিসরের মধ্যে অনুপস্থিত শিরোনাম এবং লেখক ডেটা সনাক্ত করুন।
  2. fetchBookData_(ISBN) হেল্পার পদ্ধতি ব্যবহার করে Open Library API-কে কল করে একটি নির্দিষ্ট বইয়ের হারিয়ে যাওয়া ডেটা পুনরুদ্ধার করুন।
  3. তাদের নিজ নিজ কক্ষে অনুপস্থিত শিরোনাম বা লেখক মান আপডেট করুন।

বাস্তবায়ন

নিম্নলিখিত কাজ করে এই নতুন ফাংশন বাস্তবায়ন করুন:

  1. Apps স্ক্রিপ্ট এডিটরে, আপনার স্ক্রিপ্ট প্রকল্পের শেষে নিম্নলিখিত কোড যোগ করুন:
/**
 * Fills in missing title and author data using Open Library API
 * calls.
 */ 
function fillInTheBlanks(){
  // Constants that identify the index of the title, author,
  // and ISBN columns (in the 2D bookValues array below). 
  var TITLE_COLUMN = 0;
  var AUTHOR_COLUMN = 1;
  var ISBN_COLUMN = 2;

  // Get the existing book information in the active sheet. The data
  // is placed into a 2D array.
  var dataRange = SpreadsheetApp.getActiveSpreadsheet()
    .getDataRange();
  var bookValues = dataRange.getValues();

  // Examine each row of the data (excluding the header row).
  // If an ISBN is present, and a title or author is missing,
  // use the fetchBookData_(isbn) method to retrieve the
  // missing data from the Open Library API. Fill in the
  // missing titles or authors when they're found.
  for(var row = 1; row < bookValues.length; row++){   
    var isbn = bookValues[row][ISBN_COLUMN];
    var title = bookValues[row][TITLE_COLUMN];
    var author = bookValues[row][AUTHOR_COLUMN];
   
    if(isbn != "" && (title === "" || author === "") ){
      // Only call the API if you have an ISBN number and
      // either the title or author is missing.
      var bookData = fetchBookData_(isbn);

      // Sometimes the API doesn't return the information needed.
      // In those cases, don't attempt to update the row.
      if (!bookData || !bookData.details) {
        continue;
      }

      // The API might not return a title, so only fill it in
      // if the response has one and if the title is blank in
      // the sheet.
      if(title === "" && bookData.details.title){
        bookValues[row][TITLE_COLUMN] = bookData.details.title; 
      }

      // The API might not return an author name, so only fill it in
      // if the response has one and if the author is blank in
      // the sheet.
      if(author === "" && bookData.details.authors
          && bookData.details.authors[0].name){
        bookValues[row][AUTHOR_COLUMN] =
          bookData.details.authors[0].name; 
      }
    }
  }
  
  // Insert the updated book data values into the spreadsheet.
  dataRange.setValues(bookValues);
}
  1. আপনার স্ক্রিপ্ট প্রকল্প সংরক্ষণ করুন.

কোড পূনর্বিবেচনা

এই কোডটি তিনটি বিভাগে বিভক্ত:

1: বিদ্যমান বইয়ের তথ্য পড়ুন

ফাংশনের প্রথম তিনটি লাইন কোডটিকে আরও পাঠযোগ্য করে তুলতে সাহায্য করার জন্য ধ্রুবক সংজ্ঞায়িত করে। পরবর্তী দুই লাইনে, bookValues ​​ভেরিয়েবলটি শীটের বইয়ের তথ্যের একটি স্থানীয় অনুলিপি বজায় রাখতে ব্যবহৃত হয়। কোডটি bookValues ​​থেকে তথ্য পড়বে, অনুপস্থিত তথ্য পূরণ করতে API ব্যবহার করবে এবং এই মানগুলি স্প্রেডশীটে আবার লিখবে।

2: হেল্পার ফাংশন ব্যবহার করে অনুপস্থিত তথ্য আনুন

অনুপস্থিত শিরোনাম বা লেখক খুঁজে পেতে bookValues প্রতিটি সারির উপর লুপ করে। দক্ষতা উন্নত করার সময় API কলের সংখ্যা কমাতে, কোডটি শুধুমাত্র API কল করে যদি নিম্নলিখিতগুলি সত্য হয়:

  1. সারির ISBN কলামের একটি মান আছে।
  2. হয় শিরোনাম বা সারিতে লেখক সেল খালি।

শর্তগুলি সত্য হলে, কোডটি আপনার পূর্বে প্রয়োগ করা fetchBookData_(isbn) সহায়ক ফাংশন ব্যবহার করে API-কে কল করে এবং ফলাফলটিকে bookData ভেরিয়েবলে সংরক্ষণ করে। এটিতে এখন অনুপস্থিত তথ্য থাকা উচিত যা আপনি শীটে সন্নিবেশ করতে চান৷

আমাদের স্প্রেডশীটে bookData তথ্য যোগ করা একমাত্র কাজ বাকি। যাইহোক, একটি সতর্কতা আছে. দুর্ভাগ্যবশত, ওপেন লাইব্রেরি বুক এপিআই-এর মতো সর্বজনীন API-এ কখনও কখনও আপনার অনুরোধ করা তথ্য থাকে না, অথবা মাঝে মাঝে অন্য কোন সমস্যা হতে পারে যা তথ্য প্রদান করা থেকে বাধা দেয়। আপনি যদি ধরে নেন প্রতিটি API অনুরোধ সফল হবে, আপনার কোড অপ্রত্যাশিত ত্রুটিগুলি পরিচালনা করার জন্য যথেষ্ট শক্তিশালী হবে না।

আপনার কোড API ত্রুটিগুলি পরিচালনা করতে পারে তা নিশ্চিত করতে, কোডটি ব্যবহার করার চেষ্টা করার আগে অবশ্যই API প্রতিক্রিয়া বৈধ কিনা তা পরীক্ষা করতে হবে৷ একবার bookData , এটি bookData এবং bookData.details থেকে পড়ার চেষ্টা করার আগে বিদ্যমান আছে কিনা তা যাচাই করার জন্য এটি একটি সাধারণ পরীক্ষা পরিচালনা করে। যদি উভয়টি অনুপস্থিত থাকে, তাহলে এর অর্থ API-এর কাছে আপনি যে ডেটা চেয়েছিলেন তা নেই। এই ক্ষেত্রে, continue কমান্ড কোডটিকে সেই সারিটি এড়িয়ে যেতে বলে- আপনি অনুপস্থিত কক্ষগুলি পূরণ করতে পারবেন না, তবে অন্তত আপনার স্ক্রিপ্টটি ক্র্যাশ হবে না।

3: শীটে আপডেট করা তথ্য আবার লিখুন

কোডের শেষ অংশে API ফেরত শিরোনাম এবং লেখকের তথ্য যাচাই করার জন্য অনুরূপ চেক রয়েছে। কোডটি শুধুমাত্র bookValues অ্যারে আপডেট করে যদি মূল শিরোনাম বা লেখক সেল খালি থাকে এবং API একটি মান প্রদান করে যা আপনি সেখানে রাখতে পারেন।

পত্রকের সমস্ত সারি পরীক্ষা করার পরে লুপটি প্রস্থান করে। শেষ ধাপে এখন-আপডেট করা বুকভ্যালুস অ্যারেটি bookValues Range.setValues(values) ব্যবহার করে স্প্রেডশীটে ফিরে লেখা।

ফলাফল

এখন আপনি আপনার বইয়ের ডেটা পরিষ্কার করা শেষ করতে পারেন। নিম্নলিখিতগুলি করুন:

  1. আপনি যদি এখনও না করে থাকেন তবে আপনার শীটে A2:A15 পরিসর হাইলাইট করুন এবং কমা সমস্যাগুলি পরিষ্কার করতে প্রথম কমায় বই-তালিকা > পৃথক শিরোনাম/লেখক নির্বাচন করুন।
  2. আপনি যদি এখনও না করে থাকেন, তাহলে আপনার শীটে A2:A15 পরিসর হাইলাইট করুন এবং "by" সমস্যাগুলি পরিষ্কার করতে শেষ "by" এ Book-list > আলাদা শিরোনাম/লেখক নির্বাচন করুন৷
  3. সমস্ত অবশিষ্ট কক্ষ পূরণ করতে, বই-তালিকা > ফাঁকা শিরোনাম এবং লেখক ঘর পূরণ করুন নির্বাচন করুন:

826675a3437adbdb.gif

13. উপসংহার

এই কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন। আপনি আপনার Apps স্ক্রিপ্ট কোডের বিভিন্ন অংশ সক্রিয় করতে কাস্টম মেনু তৈরি করতে শিখেছেন৷ আপনি অ্যাপস স্ক্রিপ্ট পরিষেবা এবং সর্বজনীন API ব্যবহার করে কীভাবে Google পত্রকগুলিতে ডেটা আমদানি করতে হয় তাও দেখেছেন৷ স্প্রেডশীট প্রক্রিয়াকরণে এটি একটি সাধারণ ক্রিয়াকলাপ, এবং অ্যাপস স্ক্রিপ্ট আপনাকে বিস্তৃত উত্স থেকে ডেটা আমদানি করতে দেয়৷ অবশেষে, আপনি দেখেছেন কিভাবে আপনি স্প্রেডশীট ডেটা পড়তে, প্রক্রিয়া করতে এবং সন্নিবেশ করতে Apps স্ক্রিপ্ট পরিষেবা এবং JavaScript ব্যবহার করতে পারেন৷

আপনি এই কোডল্যাব সহায়ক খুঁজে পেয়েছেন?

হ্যাঁ না

আপনি যা শিখেছেন

  • গুগল স্প্রেডশীট থেকে কীভাবে ডেটা আমদানি করবেন।
  • কিভাবে onOpen() ফাংশনে একটি কাস্টম মেনু তৈরি করবেন।
  • স্ট্রিং ডেটা মানগুলি কীভাবে পার্স এবং ম্যানিপুলেট করবেন।
  • ইউআরএল আনয়ন পরিষেবা ব্যবহার করে কীভাবে সর্বজনীন API কল করবেন।
  • একটি পাবলিক API উত্স থেকে পুনরুদ্ধার করা JSON অবজেক্ট ডেটা কীভাবে পার্স করবেন।

এরপর কি

এই প্লেলিস্টের পরবর্তী কোডল্যাবটি স্প্রেডশীটের মধ্যে ডেটা ফর্ম্যাট করার বিষয়ে আরও গভীরে যায়।

ডেটা ফরম্যাটিং -এ পরবর্তী কোডল্যাব খুঁজুন।