Google Sheets के साथ Apps Script की बुनियादी बातें #3: डेटा के साथ काम करना

1. परिचय

Google Sheets के साथ Apps Script की बुनियादी बातों के बारे में बताने वाले कोडलैब की प्लेलिस्ट के तीसरे हिस्से में आपका स्वागत है.

इस कोडलैब को पूरा करके, यह सीखा जा सकता है कि Apps Script में डेटा को मैनेज करने, कस्टम मेन्यू इस्तेमाल करने, और सार्वजनिक एपीआई से डेटा पाने के लिए, क्या-क्या किया जा सकता है. इससे आपको Sheets का बेहतर अनुभव मिलेगा. इस प्लेलिस्ट के पिछले कोडलैब में, आपको SpreadsheetApp, Spreadsheet, Sheet, और Range क्लास के बारे में बताया गया था. इस कोडलैब में भी आपको इन्हीं क्लास के साथ काम करना होगा.

आपको क्या सीखने को मिलेगा

  • Drive में मौजूद किसी निजी या शेयर की गई स्प्रेडशीट से डेटा इंपोर्ट करने का तरीका.
  • onOpen() फ़ंक्शन का इस्तेमाल करके कस्टम मेन्यू बनाने का तरीका.
  • Google Sheets की सेल में स्ट्रिंग डेटा वैल्यू को पार्स और मैनेज करने का तरीका.
  • सार्वजनिक एपीआई सोर्स से JSON ऑब्जेक्ट डेटा को पुल और उसमें बदलाव करने का तरीका.

शुरू करने से पहले

यह Google Sheets के साथ Apps Script की बुनियादी बातों के बारे में जानकारी देने वाली प्लेलिस्ट का तीसरा कोडलैब है. इस कोडलैब को शुरू करने से पहले, पिछले कोडलैब पूरे कर लें:

  1. मैक्रो और कस्टम फ़ंक्शन
  2. स्प्रेडशीट, शीट, और रेंज

आपको किन चीज़ों की ज़रूरत होगी

  • इस प्लेलिस्ट के पिछले कोडलैब में बताए गए Apps Script के बुनियादी विषयों की जानकारी.
  • Apps Script एडिटर के बारे में बुनियादी जानकारी
  • Google Sheets के बारे में बुनियादी जानकारी
  • Sheets के A1 नोटेशन को पढ़ने की सुविधा
  • JavaScript और इसकी String क्लास के बारे में बुनियादी जानकारी

2. सेट अप करें

इस कोडलैब में दी गई कसरतों को पूरा करने के लिए, स्प्रेडशीट का इस्तेमाल करना ज़रूरी है. इन एक्सरसाइज़ में इस्तेमाल करने के लिए, स्प्रेडशीट बनाने के लिए यह तरीका अपनाएं:

  1. Google Drive में एक स्प्रेडशीट बनाएं. इसके लिए, Drive के इंटरफ़ेस में जाकर, नया > Google Sheets को चुनें. इससे आपकी नई स्प्रेडशीट बन जाएगी और खुल जाएगी. फ़ाइल आपके Drive फ़ोल्डर में सेव हो जाती है.
  2. स्प्रेडशीट के टाइटल पर क्लिक करें और उसे "बिना टाइटल वाली स्प्रेडशीट" से बदलकर "डेटा में बदलाव करना और कस्टम मेन्यू" करें. आपकी शीट ऐसी दिखनी चाहिए:

545c02912de7d112.png

  1. स्क्रिप्ट एडिटर खोलने के लिए, एक्सटेंशन> Apps Script पर क्लिक करें
  2. Apps Script प्रोजेक्ट के टाइटल पर क्लिक करें और इसे "Untitled Project" से बदलकर "Data Manipulation and Custom Menus" करें. टाइटल में किए गए बदलाव को सेव करने के लिए, नाम बदलें पर क्लिक करें.

खाली स्प्रेडशीट और प्रोजेक्ट की मदद से, लैब शुरू की जा सकती है. कस्टम मेन्यू के बारे में जानने के लिए, अगले सेक्शन पर जाएं.

3. खास जानकारी: कस्टम मेन्यू आइटम की मदद से डेटा इंपोर्ट करना

Apps Script की मदद से, Google Sheets में दिखने वाले कस्टम मेन्यू तय किए जा सकते हैं. Google Docs, Google Slides, और Google Forms में भी कस्टम मेन्यू इस्तेमाल किए जा सकते हैं. कस्टम मेन्यू आइटम तय करते समय, आपको एक टेक्स्ट लेबल बनाना होता है. इसके बाद, इसे अपने स्क्रिप्ट प्रोजेक्ट में मौजूद Apps Script फ़ंक्शन से कनेक्ट करना होता है. इसके बाद, मेन्यू को यूज़र इंटरफ़ेस (यूआई) में जोड़ा जा सकता है, ताकि वह Google Sheets में दिखे:

d6b694da6b8c6783.png

जब कोई उपयोगकर्ता कस्टम मेन्यू आइटम पर क्लिक करता है, तो उससे जुड़ा Apps Script फ़ंक्शन काम करता है. यह स्क्रिप्ट एडिटर खोले बिना, Apps Script फ़ंक्शन चलाने का एक आसान तरीका है. इससे स्प्रेडशीट के अन्य उपयोगकर्ता भी आपके कोड को लागू कर सकते हैं. इसके लिए, उन्हें यह जानने की ज़रूरत नहीं होती कि यह कोड कैसे काम करता है या Apps Script कैसे काम करती है. उनके लिए, यह सिर्फ़ एक और मेन्यू आइटम है.

कस्टम मेन्यू आइटम, onOpen() सिंपल ट्रिगर फ़ंक्शन में तय किए जाते हैं. इसके बारे में आपको अगले सेक्शन में जानकारी मिलेगी.

4. onOpen() फ़ंक्शन

Apps Script में सिंपल ट्रिगर, कुछ शर्तों या इवेंट के जवाब में Apps Script के किसी खास कोड को चलाने का तरीका उपलब्ध कराते हैं. ट्रिगर बनाते समय, यह तय किया जाता है कि कौनसा इवेंट ट्रिगर को फ़ायर करेगा. साथ ही, एक Apps Script फ़ंक्शन दिया जाता है जो इवेंट के लिए काम करता है.

onOpen() एक सामान्य ट्रिगर का उदाहरण है. इन्हें सेट अप करना आसान है. आपको बस onOpen() नाम का Apps Script फ़ंक्शन लिखना है. इसके बाद, Apps Script इस फ़ंक्शन को हर बार तब चलाता है, जब इससे जुड़ी स्प्रेडशीट खोली जाती है या फिर से लोड की जाती है:

/**  * 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() में, पहली लाइन में getUi() तरीके का इस्तेमाल करके, Ui ऑब्जेक्ट को हासिल किया जाता है. यह ऑब्जेक्ट, उस ऐक्टिव स्प्रेडशीट के यूज़र इंटरफ़ेस को दिखाता है जिससे यह स्क्रिप्ट जुड़ी हुई है.

अगली तीन लाइनों से मेन्यू (Book-list) बनाया जाता है. इसके बाद, उस मेन्यू में एक मेन्यू आइटम (Load Book-list) जोड़ा जाता है. इसके बाद, मेन्यू को स्प्रेडशीट के इंटरफ़ेस में जोड़ा जाता है. ऐसा करने के लिए, क्रम से createMenu(caption), addItem(caption, functionName), और addToUi() तरीकों का इस्तेमाल किया जाता है.

addItem(caption, functionName) तरीके से, मेन्यू आइटम के लेबल और Apps Script फ़ंक्शन के बीच कनेक्शन बनाया जाता है. यह फ़ंक्शन तब चलता है, जब मेन्यू आइटम चुना जाता है. इस मामले में, Load Book-list मेन्यू आइटम को चुनने पर, Sheets loadBookList() फ़ंक्शन को चलाने की कोशिश करता है. हालांकि, यह फ़ंक्शन अभी मौजूद नहीं है.

नतीजे

यह फ़ंक्शन काम करता है या नहीं, यह देखने के लिए इसे अभी चलाएं:

  1. Google Sheets में, अपनी स्प्रेडशीट फिर से लोड करें. ध्यान दें: आम तौर पर, इससे स्क्रिप्ट एडिटर वाला टैब बंद हो जाता है.
  2. टूल > स्क्रिप्ट एडिटर को चुनकर, स्क्रिप्ट एडिटर को फिर से खोलें.

स्प्रेडशीट के फिर से लोड होने के बाद, आपको मेन्यू बार पर नया Book-list मेन्यू दिखेगा:

687dfb214f2930ba.png

किताबों की सूची पर क्लिक करने से, आपको यह मेन्यू दिखेगा:

8a4a391fbabcb16a.png

अगले सेक्शन में, loadBookList() फ़ंक्शन के लिए कोड बनाया गया है. साथ ही, इसमें Apps Script में डेटा के साथ इंटरैक्ट करने का एक तरीका बताया गया है: अन्य स्प्रेडशीट पढ़ना.

5. स्प्रेडशीट का डेटा इंपोर्ट करना

कस्टम मेन्यू बनाने के बाद, ऐसे फ़ंक्शन बनाए जा सकते हैं जिन्हें मेन्यू आइटम पर क्लिक करके चलाया जा सकता है.

फ़िलहाल, कस्टम मेन्यू Book-list में एक मेन्यू आइटम है: Load Book-list. Load Book-list मेन्यू आइटम को चुनने पर कॉल किया जाने वाला फ़ंक्शन, loadBookList(), आपकी स्क्रिप्ट में मौजूद नहीं है. इसलिए, किताबों की सूची > किताबों की सूची लोड करें को चुनने पर यह गड़बड़ी दिखती है:

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 उस स्प्रेडशीट का रेफ़रंस सेव करता है जिससे कोड डेटा पढ़ रहा है. यह कोड, स्प्रेडशीट को उसके स्प्रेडशीट आईडी के हिसाब से ढूंढता है. इस उदाहरण में, हमने सोर्स स्प्रेडशीट का आईडी दिया है, ताकि उससे डेटा पढ़ा जा सके. साथ ही, 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 में किताबों की सूची > किताबों की सूची लोड करें को चुनें:

3c797e1e2b9fe641.gif

अब आपके पास एक ऐसी शीट है जिसमें किताबों के टाइटल, लेखकों के नाम, और 13 अंकों वाले ISBN नंबर की सूची है. अगले सेक्शन में, आपको स्ट्रिंग मैनिपुलेशन और कस्टम मेन्यू का इस्तेमाल करके, इस किताब की सूची में मौजूद डेटा को बदलने और अपडेट करने का तरीका बताया जाएगा.

6. खास जानकारी: स्प्रेडशीट के डेटा को साफ़ करना

अब आपकी शीट में किताब की जानकारी मौजूद है. हर लाइन में किसी किताब की जानकारी होती है. इसमें किताब का नाम, लेखक का नाम, और ISBN नंबर अलग-अलग कॉलम में दिया जाता है. हालांकि, इस रॉ डेटा में कुछ समस्याएं भी दिख सकती हैं:

  1. कुछ लाइनों में, टाइटल और लेखक का नाम एक साथ टाइटल कॉलम में रखा गया है. इन्हें कॉमा या " by " स्ट्रिंग से लिंक किया गया है.
  2. कुछ लाइनों में किताब का टाइटल या लेखक का नाम मौजूद नहीं है.

अगले सेक्शन में, डेटा को साफ़ करके इन समस्याओं को ठीक किया जाएगा. पहली समस्या के लिए, ऐसे फ़ंक्शन बनाए जाएंगे जो टाइटल कॉलम को पढ़ते हैं और जब भी कोई कॉमा या " by " डेलिमिटर मिलता है, तो टेक्स्ट को अलग-अलग हिस्सों में बांट देते हैं. साथ ही, लेखक और टाइटल के सबस्ट्रिंग को सही कॉलम में रखते हैं. दूसरी समस्या के लिए, आपको ऐसा कोड लिखना होगा जो किसी बाहरी एपीआई का इस्तेमाल करके, किताब की छूटी हुई जानकारी को अपने-आप खोजे और उस जानकारी को आपकी शीट में जोड़ दे.

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 चुनें और चलाएं पर क्लिक करें. इससे 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 Sheets में, SPLIT() फ़ंक्शन उपलब्ध है. यह फ़ंक्शन, स्ट्रिंग को कॉलम में बांटता है. हालांकि, डेटासेट में अक्सर ऐसी समस्याएं होती हैं जिन्हें Sheets के बिल्ट-इन फ़ंक्शन से आसानी से हल नहीं किया जा सकता. इन मामलों में, Apps Script कोड लिखा जा सकता है. इससे डेटा को साफ़ करने और व्यवस्थित करने के लिए ज़रूरी मुश्किल कार्रवाइयां की जा सकती हैं.

अपने डेटा को साफ़ करने के लिए, सबसे पहले splitAtFirstComma() नाम के फ़ंक्शन को लागू करें. यह फ़ंक्शन, कॉमा मिलने पर लेखक और टाइटल को उनके संबंधित सेल में बांट देता है.

splitAtFirstComma() फ़ंक्शन को यह तरीका अपनाना चाहिए:

  1. चुनी गई मौजूदा सेल को दिखाने वाली रेंज पाएं.
  2. जांच करता है कि रेंज में मौजूद सेल में कॉमा है या नहीं.
  3. जहां भी कॉमा दिखे, वहां स्ट्रिंग को दो (और सिर्फ़ दो) सबस्ट्रिंग में बांटें. ऐसा पहले कॉमा की जगह पर करें. इसे आसान बनाने के लिए, यह माना जा सकता है कि हर कॉमा, "[authors], [title]" स्ट्रिंग पैटर्न को दिखाता है. अगर सेल में एक से ज़्यादा कॉमा दिखते हैं, तो स्ट्रिंग में मौजूद पहले कॉमा के आधार पर सेल को स्प्लिट किया जा सकता है.
  4. सबस्ट्रिंग को, टाइटल और लेखक की जानकारी वाले सेल के नए कॉन्टेंट के तौर पर सेट करें.

लागू करना

इन चरणों को लागू करने के लिए, आपको स्प्रेडशीट सेवा के उन्हीं तरीकों का इस्तेमाल करना होगा जिनका इस्तेमाल आपने पहले किया था. हालांकि, आपको स्ट्रिंग डेटा में बदलाव करने के लिए, JavaScript का भी इस्तेमाल करना होगा. यह तरीका अपनाएं:

  1. Apps Script एडिटर में, अपनी स्क्रिप्ट प्रोजेक्ट के आखिर में यह फ़ंक्शन जोड़ें:
/**  * 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 For Loop का इस्तेमाल किया जाता है. जब JavaScript String indexOf() तरीके का इस्तेमाल करके, कॉमा सबस्ट्रिंग (", ") का पता लगाया जाता है, तो कोड यह काम करता है:

  1. सेल की स्ट्रिंग वैल्यू को titlesAndAuthors वैरिएबल में कॉपी किया जाता है.
  2. कॉमा की जगह का पता लगाने के लिए, JavaScript String indexOf() तरीके का इस्तेमाल किया जाता है.
  3. कॉमा डेलिमिटर से पहले और डेलिमिटर के बाद सबस्ट्रिंग पाने के लिए, JavaScript String slice() मेथड को दो बार कॉल किया जाता है.
  4. सबस्ट्रिंग को titleAuthorValues 2D ऐरे में वापस कॉपी किया जाता है. इससे उस पोज़िशन पर मौजूद वैल्यू बदल जाती हैं. हम "[authors], [title]" पैटर्न का इस्तेमाल कर रहे हैं. इसलिए, दो सबस्ट्रिंग का क्रम उलट दिया जाता है, ताकि टाइटल को पहले कॉलम में और लेखकों को दूसरे कॉलम में रखा जा सके.

ध्यान दें: अगर कोड को कॉमा नहीं मिलता है, तो वह पंक्ति में मौजूद डेटा में कोई बदलाव नहीं करता है.

3: नई वैल्यू को वापस शीट में कॉपी करना

टाइटल सेल की सभी वैल्यू की जांच हो जाने के बाद, अपडेट की गई titleAuthorValues 2D ऐरे को Range.setValues(values) तरीके का इस्तेमाल करके, स्प्रेडशीट में वापस कॉपी कर दिया जाता है.

नतीजे

अब splitAtFirstComma() फ़ंक्शन के असर को देखा जा सकता है. इसे चलाने के लिए, पहले कॉमा पर टाइटल/लेखक को अलग करें मेन्यू आइटम को चुनें. इसके बाद...

...एक सेल:

a24763b60b305376.gif

...या एक से ज़्यादा सेल:

89c5c89b357d3713.gif

आपने अब एक ऐसा Apps Script फ़ंक्शन बना लिया है जो Sheets के डेटा को प्रोसेस करता है. इसके बाद, आपको दूसरा स्प्लिटर फ़ंक्शन लागू करना होगा.

9. "by" डीलिमिटर के आधार पर टेक्स्ट को अलग-अलग हिस्सों में बांटना

ओरिजनल डेटा देखने पर, आपको एक और समस्या दिख सकती है. कुछ डेटा फ़ॉर्मैट में, टाइटल और लेखकों के नाम एक ही सेल में "[authors], [title]" के तौर पर दिखते हैं. वहीं, अन्य सेल में लेखक और टाइटल के नाम "[title] by [authors]" के तौर पर दिखते हैं:

41f0dd5ac63b62f4.png

लागू करना

पिछले सेक्शन में बताई गई तकनीक का इस्तेमाल करके, इस समस्या को हल किया जा सकता है. इसके लिए, splitAtLastBy() नाम का एक फ़ंक्शन बनाएं. इस फ़ंक्शन का काम splitAtFirstComma() जैसा ही है. इन दोनों में सिर्फ़ यह अंतर है कि यह टेक्स्ट के थोड़े अलग पैटर्न को खोजता है. इस फ़ंक्शन को लागू करने के लिए, यह तरीका अपनाएं:

  1. Apps Script एडिटर में, अपनी स्क्रिप्ट प्रोजेक्ट के आखिर में यह फ़ंक्शन जोड़ें:
/**   * 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) तरीके का इस्तेमाल किया गया है. इसका मतलब है कि अगर शुरुआती स्ट्रिंग में एक से ज़्यादा " by " सबस्ट्रिंग हैं, तो आखिरी " by " को छोड़कर बाकी सभी को टाइटल का हिस्सा माना जाता है.
  3. स्ट्रिंग को अलग-अलग हिस्सों में बांटने के बाद, पहले सबस्ट्रिंग को टाइटल और दूसरे को लेखक के तौर पर सेट किया जाता है. यह splitAtFirstComma() के उलट क्रम में होता है.

नतीजे

अब splitAtLastBy() फ़ंक्शन के असर को देखा जा सकता है. इसे चलाने के लिए, Separate title/author at last "by" मेन्यू आइटम को चुनें. इसके बाद...

...एक सेल:

4e6679e134145975.gif

...या एक से ज़्यादा सेल:

3c879c572c61e62f.gif

आपने कोडलैब का यह सेक्शन पूरा कर लिया है. अब Apps Script का इस्तेमाल करके, किसी शीट में मौजूद स्ट्रिंग डेटा को पढ़ा और उसमें बदलाव किया जा सकता है. साथ ही, कस्टम मेन्यू का इस्तेमाल करके, Apps Script के अलग-अलग निर्देश लागू किए जा सकते हैं.

अगले सेक्शन में, आपको इस डेटासेट को और बेहतर बनाने का तरीका बताया जाएगा. इसके लिए, सार्वजनिक एपीआई से लिए गए डेटा को खाली सेल में भरें.

10. खास जानकारी: सार्वजनिक एपीआई से डेटा पाना

अब तक आपने अपने डेटासेट को बेहतर बनाया है, ताकि टाइटल और लेखक के नाम के फ़ॉर्मैट से जुड़ी कुछ समस्याओं को ठीक किया जा सके. हालांकि, डेटासेट में अब भी कुछ जानकारी मौजूद नहीं है. इसे यहां दी गई सेल में हाइलाइट किया गया है:

af0dba8cb09d1a49.png

आपके पास मौजूद डेटा पर स्ट्रिंग ऑपरेशन का इस्तेमाल करके, छूटा हुआ डेटा नहीं पाया जा सकता. इसके बजाय, आपको किसी दूसरे सोर्स से वह डेटा पाना होगा. Apps Script में ऐसा करने के लिए, बाहरी एपीआई से जानकारी का अनुरोध करें. इससे आपको अतिरिक्त डेटा मिल सकता है.

एपीआई, ऐप्लिकेशन प्रोग्रामिंग इंटरफ़ेस होते हैं. यह एक सामान्य शब्द है. हालांकि, यह एक ऐसी सेवा है जिसे आपके प्रोग्राम और स्क्रिप्ट, जानकारी का अनुरोध करने या कुछ कार्रवाइयां करने के लिए कॉल कर सकती हैं. इस सेक्शन में, सार्वजनिक तौर पर उपलब्ध एपीआई को कॉल किया जा रहा है. इससे आपको किताब की जानकारी का अनुरोध करने में मदद मिलती है. इस जानकारी को अपनी शीट की खाली सेल में डाला जा सकता है.

इस सेक्शन में, आपको इनके बारे में जानकारी मिलेगी:

  • किसी बाहरी एपीआई सोर्स से किताब का डेटा पाने का अनुरोध करें.
  • जवाब में मिले डेटा से टाइटल और लेखक की जानकारी निकालें और उसे अपनी स्प्रेडशीट में लिखें.

11. UrlFetch की मदद से बाहरी डेटा फ़ेच करना

आपकी स्प्रेडशीट के साथ सीधे तौर पर काम करने वाले कोड के बारे में जानने से पहले, Apps Script में बाहरी एपीआई के साथ काम करने के बारे में जानें. इसके लिए, खास तौर पर Open Library API से किताब की जानकारी का अनुरोध करने के लिए, सहायता फ़ंक्शन बनाएं.

हमारा हेल्पर फ़ंक्शन, fetchBookData_(ISBN), किसी किताब के 13 अंकों वाले ISBN नंबर को पैरामीटर के तौर पर लेता है और उस किताब के बारे में डेटा दिखाता है. यह Open Library API से कनेक्ट होता है और उससे जानकारी पाता है. इसके बाद, यह मिले हुए JSON ऑब्जेक्ट को पार्स करता है.

लागू करना

इस हेल्पर फ़ंक्शन को लागू करने के लिए, यह तरीका अपनाएं:

  1. Apps Script एडिटर में, अपनी स्क्रिप्ट के आखिर में यह कोड जोड़ें:
/**  * 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: एपीआई अनुरोध

पहली दो लाइनों में, fetchBookData_(ISBN), एपीआई के यूआरएल एंडपॉइंट और Apps Script की यूआरएल फ़ेच सेवा का इस्तेमाल करके, सार्वजनिक Open Library API से कनेक्ट होता है.

url वैरिएबल, सिर्फ़ एक यूआरएल स्ट्रिंग है. जैसे, कोई वेब पता. यह Open Library के सर्वर पर मौजूद किसी जगह की ओर इशारा करता है. इसमें तीन पैरामीटर (bibkeys, jscmd, और format) भी शामिल हैं. इनसे Open Library के सर्वर को यह पता चलता है कि आपने किस तरह की जानकारी का अनुरोध किया है और जवाब को कैसे स्ट्रक्चर करना है. इस मामले में, आपको किताब का ISBN नंबर देना होगा और JSON फ़ॉर्मैट में ज़्यादा जानकारी देने के लिए कहना होगा.

यूआरएल स्ट्रिंग बनाने के बाद, कोड उस जगह के लिए अनुरोध भेजता है और उसे जवाब मिलता है. ऐसा UrlFetchApp.fetch(url, params) तरीके से किया जाता है. यह आपके दिए गए बाहरी यूआरएल को जानकारी का अनुरोध भेजता है और मिले जवाब को response वैरिएबल में सेव करता है. यूआरएल के अलावा, कोड में muteHttpExceptions पैरामीटर को true पर सेट किया जाता है. इस सेटिंग का मतलब है कि अगर अनुरोध से एपीआई में गड़बड़ी होती है, तो आपका कोड नहीं रुकेगा. इसके बजाय, गड़बड़ी का मैसेज दिखाया जाता है.

अनुरोध से एक HTTPResponse ऑब्जेक्ट मिलता है, जिसे response वैरिएबल में सेव किया जाता है. एचटीटीपी रिस्पॉन्स में रिस्पॉन्स कोड, एचटीटीपी हेडर, और मुख्य रिस्पॉन्स कॉन्टेंट शामिल होता है. यहां काम की जानकारी मुख्य JSON कॉन्टेंट है. इसलिए, कोड को उसे निकालना होगा. इसके बाद, JSON को पार्स करके, ज़रूरी जानकारी ढूंढनी होगी और उसे वापस लाना होगा.

2: एपीआई से मिले रिस्पॉन्स को पार्स करना और काम की जानकारी दिखाना

कोड की आखिरी तीन लाइनों में, HTTPResponse.getContentText() तरीके से जवाब के मुख्य कॉन्टेंट को स्ट्रिंग के तौर पर दिखाया जाता है. यह स्ट्रिंग JSON फ़ॉर्मैट में है, लेकिन Open Library API, कॉन्टेंट और फ़ॉर्मैट के बारे में सटीक जानकारी देता है. JSON.parse(jsonString) तरीके से, JSON स्ट्रिंग को JavaScript ऑब्जेक्ट में बदला जाता है, ताकि डेटा के अलग-अलग हिस्सों को आसानी से निकाला जा सके. आखिर में, फ़ंक्शन किताब के आईएसबीएन नंबर से जुड़ा डेटा दिखाता है.

नतीजे

fetchBookData_(ISBN) को लागू करने के बाद, आपके कोड में मौजूद अन्य फ़ंक्शन, किसी भी किताब की जानकारी उसके ISBN नंबर का इस्तेमाल करके ढूंढ सकते हैं. इस फ़ंक्शन का इस्तेमाल, अपनी स्प्रेडशीट की सेल में जानकारी भरने के लिए किया जाता है.

12. एपीआई डेटा को स्प्रेडशीट में लिखना

अब fillInTheBlanks() फ़ंक्शन लागू किया जा सकता है. इससे ये काम किए जा सकते हैं:

  1. डेटा की मौजूदा सीमा में, टाइटल और लेखक के छूटे हुए डेटा की पहचान करें.
  2. fetchBookData_(ISBN) हेल्पर तरीके का इस्तेमाल करके, Open Library API को कॉल करें और किसी किताब का छूटा हुआ डेटा वापस पाएं.
  3. जिन सेल में टाइटल या लेखक की वैल्यू मौजूद नहीं है उन्हें अपडेट करें.

लागू करना

इस नए फ़ंक्शन को लागू करने के लिए, यह तरीका अपनाएं:

  1. Apps Script एडिटर में, अपने स्क्रिप्ट प्रोजेक्ट के आखिर में यह कोड जोड़ें:
/**  * 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 से जानकारी पढ़ेगा. साथ ही, एपीआई का इस्तेमाल करके, छूटी हुई जानकारी भरेगा. इसके बाद, इन वैल्यू को वापस स्प्रेडशीट में लिखेगा.

2: हेल्पर फ़ंक्शन का इस्तेमाल करके, मौजूद न होने वाली जानकारी फ़ेच करना

यह कोड, bookValues में मौजूद हर लाइन को लूप करता है, ताकि छूटे हुए टाइटल या लेखकों का पता लगाया जा सके. एपीआई कॉल की संख्या कम करने और परफ़ॉर्मेंस को बेहतर बनाने के लिए, कोड सिर्फ़ तब एपीआई को कॉल करता है, जब ये शर्तें पूरी होती हैं:

  1. लाइन के ISBN कॉलम में कोई वैल्यू मौजूद हो.
  2. लाइन में मौजूद टाइटल या लेखक का नाम वाला सेल खाली है.

अगर शर्तें पूरी होती हैं, तो कोड, एपीआई को कॉल करता है. इसके लिए, वह fetchBookData_(isbn) हेल्पर फ़ंक्शन का इस्तेमाल करता है, जिसे आपने पहले लागू किया था. साथ ही, वह नतीजे को bookData वैरिएबल में सेव करता है. अब इसमें वह जानकारी होनी चाहिए जिसे आपको शीट में डालना है.

अब हमें सिर्फ़ bookData की जानकारी को अपनी स्प्रेडशीट में जोड़ना है. हालांकि, इसमें एक चेतावनी है. माफ़ करें, कभी-कभी ऐसा होता है कि Open Library Book API जैसे सार्वजनिक एपीआई के पास आपकी मांगी गई जानकारी नहीं होती. इसके अलावा, कभी-कभी कोई और समस्या होने की वजह से भी यह जानकारी नहीं मिल पाती. अगर आपको लगता है कि हर एपीआई अनुरोध पूरा हो जाएगा, तो आपका कोड अनचाही गड़बड़ियों को हैंडल करने के लिए काफ़ी मज़बूत नहीं होगा.

यह पक्का करने के लिए कि आपका कोड, एपीआई से जुड़ी गड़बड़ियों को ठीक कर सकता है, कोड को यह जांच करनी होगी कि एपीआई का रिस्पॉन्स मान्य है या नहीं. इसके बाद ही, कोड का इस्तेमाल किया जा सकेगा. कोड के bookData हो जाने के बाद, यह एक सामान्य जांच करता है. इससे यह पुष्टि की जाती है कि bookData और bookData.details मौजूद हैं. इसके बाद ही, उनसे डेटा पढ़ा जाता है. अगर इनमें से कोई भी मौजूद नहीं है, तो इसका मतलब है कि एपीआई के पास वह डेटा नहीं है जो आपको चाहिए. इस मामले में, continue कमांड, कोड को उस लाइन को छोड़ने के लिए कहती है. हालांकि, आपके पास छूटी हुई सेल में जानकारी भरने का विकल्प नहीं होता, लेकिन कम से कम आपकी स्क्रिप्ट क्रैश नहीं होगी.

3: अपडेट की गई जानकारी को वापस शीट में लिखना

कोड के आखिरी हिस्से में, एपीआई से मिले टाइटल और लेखक की जानकारी की पुष्टि करने के लिए, इसी तरह की जांच की जाती है. यह कोड, bookValues कैटगरी को सिर्फ़ तब अपडेट करता है, जब मूल टाइटल या लेखक सेल खाली हो और एपीआई ने ऐसी वैल्यू दिखाई हो जिसे वहां रखा जा सकता हो.

शीट की सभी पंक्तियों की जांच करने के बाद, लूप बंद हो जाता है. आखिरी चरण में, अपडेट की गई bookValues ऐरे को स्प्रेडशीट में वापस लिखने के लिए, Range.setValues(values) का इस्तेमाल करें.

नतीजे

अब अपनी किताब के डेटा को साफ़ करने की प्रोसेस पूरी की जा सकती है. तो निम्न कार्य करें:

  1. अगर आपने अब तक ऐसा नहीं किया है, तो अपनी शीट में A2:A15 रेंज को हाइलाइट करें. इसके बाद, किताबों की सूची > पहले कॉमा के हिसाब से टाइटल/लेखक को अलग करें को चुनें, ताकि कॉमा से जुड़ी समस्याओं को ठीक किया जा सके.
  2. अगर आपने अब तक ऐसा नहीं किया है, तो अपनी शीट में A2:A15 रेंज को हाइलाइट करें. इसके बाद, "by" से जुड़ी समस्याओं को ठीक करने के लिए, किताबों की सूची > आखिर में "by" के हिसाब से टाइटल/लेखक को अलग करें को चुनें.
  3. बची हुई सभी सेल में जानकारी भरने के लिए, किताबों की सूची > टाइटल और लेखक की खाली सेल में जानकारी भरें चुनें:

826675a3437adbdb.gif

13. नतीजा

इस कोडलैब को पूरा करने के लिए बधाई. आपने अपने Apps Script कोड के अलग-अलग हिस्सों को चालू करने के लिए, कस्टम मेन्यू बनाने का तरीका जान लिया है. आपने यह भी देखा कि Apps Script सेवाओं और सार्वजनिक एपीआई का इस्तेमाल करके, Google Sheets में डेटा कैसे इंपोर्ट किया जाता है. यह स्प्रेडशीट प्रोसेसिंग में एक सामान्य कार्रवाई है. Apps Script की मदद से, अलग-अलग सोर्स से डेटा इंपोर्ट किया जा सकता है. आखिर में, आपने देखा कि स्प्रेडशीट डेटा को पढ़ने, प्रोसेस करने, और डालने के लिए, Apps Script की सेवाओं और JavaScript का इस्तेमाल कैसे किया जा सकता है.

क्या आपको यह कोडलैब काम का लगा?

हां नहीं

आपने क्या सीखा

  • Google Sheets से डेटा इंपोर्ट करने का तरीका.
  • onOpen() फ़ंक्शन में कस्टम मेन्यू बनाने का तरीका.
  • स्ट्रिंग डेटा वैल्यू को पार्स करने और उनमें बदलाव करने का तरीका.
  • यूआरएल फ़ेच करने की सेवा का इस्तेमाल करके, सार्वजनिक एपीआई को कॉल करने का तरीका.
  • सार्वजनिक एपीआई सोर्स से मिले JSON ऑब्जेक्ट डेटा को पार्स करने का तरीका.

आगे क्या करना है

इस प्लेलिस्ट के अगले कोडलैब में, स्प्रेडशीट में डेटा को फ़ॉर्मैट करने के तरीके के बारे में ज़्यादा जानकारी दी गई है.

अगला कोडलैब डेटा फ़ॉर्मैट करना पर जाकर देखें.