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

1. परिचय

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

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

आप इन चीज़ों के बारे में जानेंगे

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

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

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

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

आपको इनकी ज़रूरत होगी

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

2. सेट अप करें

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

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

545c02912de7d112.png

  1. स्क्रिप्ट एडिटर खोलने के लिए, एक्सटेंशन>ऐप्लिकेशन स्क्रिप्ट पर क्लिक करें
  2. Apps Script प्रोजेक्ट के शीर्षक पर क्लिक करें और इसे &title_title प्रोजेक्ट</कोट; से &डेटा में कमी और डेटा मेन्यू और कस्टम मेन्यू में बदलें; शीर्षक में किए गए बदलाव को सेव करने के लिए, नाम बदलें पर क्लिक करें.

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

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

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

d6b694da6b8c6783.png

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

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

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

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

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

अगली तीन लाइनें मेन्यू (Book-list) बनाती हैं, उस मेन्यू में मेन्यू आइटम (Load Book-list) जोड़ती हैं. इसके बाद, मेन्यू को स्प्रेडशीट और #39; इंटरफ़ेस में जोड़ें. यह 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. स्प्रेडशीट डेटा इंपोर्ट करना

अब जबकि आप #39; कस्टम मेन्यू बना चुके हैं, तो ऐसे फ़ंक्शन बना सकते हैं जिन्हें मेन्यू के आइटम पर क्लिक करके चलाया जा सकता है.

फ़िलहाल, कस्टम मेन्यू में Book-list मेन्यू आइटम है: Load Book-list. जब आप Load Book-list मेन्यू आइटम चुनते हैं, तो फ़ंक्शन फ़ंक्शन loadBookList(), होता है. आपकी स्क्रिप्ट में 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: डेस्टिनेशन शीट की पहचान करना

पहली लाइन, मौजूदा शीट ऑब्जेक्ट का रेफ़रंस पाने और उसे वैरिएबल sheet में सेव करने के लिए SpreadsheetApp.getActiveSheet() का इस्तेमाल करती है. इस शीट को डेटा कॉपी किया जाएगा.

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: डेस्टिनेशन शीट को फ़ॉर्मैट करना

डेस्टिनेशन शीट के नाम को Book-list से बदलने के लिए, Sheet.setName(name) का इस्तेमाल किया जाता है. फ़ंक्शन की आखिरी लाइन डेस्टिनेशन टैब के पहले तीन कॉलम का आकार बदलने के लिए, Sheet.autoResizeColumns(startColumn, numColumns) का इस्तेमाल करती है. इससे आप नए डेटा को आसानी से पढ़ सकते हैं.

नतीजे

आप इस फ़ंक्शन को काम कर रहे हैं. अपनी स्प्रेडशीट में फ़ंक्शन भरने के लिए Google Books में, किताब की सूची; किताब की सूची लोड करें चुनें:

3c797e1e2b9fe641.gif

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

6. खास जानकारी: स्प्रेडशीट का डेटा मिटाएं

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

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

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

7. मेन्यू में आइटम जोड़ें

आप #39;डेटा हटाने की कार्रवाइयों को कंट्रोल करने के लिए तीन मेन्यू आइटम बनाना चाहेंगे.

लागू करना

आपको onOpen() के लिए अलग से मेन्यू आइटम शामिल करने देने के लिए, 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 स्क्रिप्ट कोड लिख सकते हैं.

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

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

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

लागू करना

इन कदमों को लागू करने के लिए, आप और #39;पहले इस्तेमाल किए गए स्प्रेडशीट सेवा के तरीकों का इस्तेमाल करेंगे, लेकिन आपको स्ट्रिंग डेटा में हेर-फेर करने के लिए 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 में दी गई वैल्यू की जांच करता है. लूप के लिए JavaScript का इस्तेमाल titleAuthorValues के पहले कॉलम में सभी मानों की जांच करने के लिए किया जाता है. जब JavaScript स्ट्रिंग indexOf() तरीके का इस्तेमाल करके, कॉमा (", ") कॉमा मिलता है, तो कोड ये काम करता है:

  1. सेल स्ट्रिंग के मान को titlesAndAuthors वैरिएबल में कॉपी किया जाता है.
  2. कॉमा की जगह का पता JavaScript स्ट्रिंग indexOf() तरीके का इस्तेमाल करके लगाया जाता है.
  3. JavaScript स्ट्रिंग स्लाइस() वाले तरीके को दो बार कॉल किया जाता है, ताकि कॉमा डीलिमिटर से पहले सबस्ट्रिंग और डीलिमिटर के बाद सबस्ट्रिंग मिल सके.
  4. सबस्ट्रिंग, titleAuthorValues 2D अरे में कॉपी कर ली जाती हैं जिससे वे मौजूदा जगह पर मौजूदा मानों को ओवरराइट कर देते हैं. हम &&309;एक "[लेखक], [शीर्षक]&कोटेशन, पैटर्न को मानते हैं; इसलिए दो सबस्ट्रिंग का क्रम, पहले कॉलम में शीर्षक और दूसरे कॉलम में लेखक रखने के लिए बदल दिया जाता है.

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

3: नए मानों को शीट में वापस कॉपी करें

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

नतीजे

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

...एक सेल:

a24763b60b305376.gif

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

89c5c89b357d3713.gif

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

9. &लिमिटर के आधार पर टेक्स्ट को स्प्लिट करें

मूल डेटा को देखने पर, आपको कोई दूसरी समस्या दिख सकती है. [कोटेशन], [शीर्षक]&title> के तौर पर, एक ही डेटा के डेटा फ़ॉर्मैट के शीर्षक और लेखकों की तरह ही, [authors][title]] का अन्य सेल फ़ॉर्मैट लेखक और शीर्षक भी इसी तरह हैं:

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. &string> & & & होना / by; का इस्तेमाल स्ट्रिंग डीलिमिटर के तौर पर किया जाता है, न कि & &कोटेशन;, &कोटेशन का.
  2. यहां String.indexOf(substring) के बजाय JavaScript String.lastIndexOf(substring) तरीके का इस्तेमाल किया जाता है. इसका मतलब यह है कि अगर शुरुआत की स्ट्रिंग में एक से ज़्यादा &कोट हैं; by सभी कोट हैं, तो सभी आखिरी &कोट हैं; by &कोटेशन; को शीर्षक का हिस्सा माना जाता है.
  3. स्ट्रिंग को बांटने के बाद, पहली सबस्ट्रिंग, शीर्षक के तौर पर और दूसरी लेखक के तौर पर सेट होती है (splitAtFirstComma() का उलटा क्रम.)

नतीजे

अब splitAtLastBy() फ़ंक्शन के असर को देखा जा सकता है. इसे चुनने के बाद, चलाने के लिए आखिर में शीर्षक/लेखक को अलग करें;

...एक सेल:

4e6679e134145975.gif

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

3c879c572c61e62f.gif

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

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

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

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

af0dba8cb09d1a49.png

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

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

इस सेक्शन में आपको ये काम करने के तरीके बताए गए हैं:

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

11. UrlFetch के साथ बाहरी डेटा फ़ेच करें

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

हमारा हेल्पर फ़ंक्शन, fetchBookData_(ISBN) पैरामीटर के तौर पर किताब का 13 अंकों वाला ISBN नंबर लेता है और उस किताब के बारे में डेटा दिखाता है. यह ओपन लाइब्रेरी एपीआई से जानकारी को कनेक्ट करके उसे वापस लाता है और फिर रिटर्न किए गए 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) एपीआई और #39; यूआरएल एंडपॉइंट और Apps Script' के यूआरएल फ़ेच सेवा का इस्तेमाल करके सार्वजनिक ओपन लाइब्रेरी एपीआई से कनेक्ट हो जाता है.

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

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

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

2: एपीआई के जवाब को पार्स करें और दिलचस्पी की जानकारी दिखाएं

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

नतीजे

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

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

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

  1. चालू डेटा रेंज में मौजूद शीर्षक और लेखक के डेटा की पहचान करें.
  2. fetchBookData_(ISBN) हेल्पर वाले तरीके का इस्तेमाल करके, ओपन लाइब्रेरी एपीआई को कॉल करके किसी खास किताब का पुराना डेटा फिर से पाएं.
  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 से जानकारी पढ़ेगा, गायब जानकारी भरने के लिए API का इस्तेमाल करेगा, और इन मानों को स्प्रेडशीट पर वापस लिख देगा.

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

छूटे हुए शीर्षकों या लेखकों का पता लगाने के लिए, कोड bookValues की हर पंक्ति पर लूप में चलता है. परफ़ॉर्मेंस को बेहतर बनाने के साथ-साथ, एपीआई कॉल की संख्या को कम करने के लिए, कोड सिर्फ़ एपीआई को कॉल करता है, अगर ये सही हैं:

  1. पंक्ति's ISBN स्तंभ में एक मान है.
  2. पंक्ति का शीर्षक या लेखक का सेल खाली है.

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

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

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

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

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

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

नतीजे

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

  1. अगर आपने अब तक #39;
  2. अगर आपने अभी तक #39;नहीं किया है, तो अपनी शीट में A2:A15 रेंज को हाइलाइट करें और &"दर &बाय</t> में समस्याओं को ठीक करने के लिए किताब के नाम की सूची और आख़िरी शीर्षक को अलग करके &&tt&by_कोटेशन चुनें.
  3. सभी बचे हुए सेल भरने के लिए, किताब की सूची > खाली शीर्षक और लेखक सेल भरें चुनें:

826675a3437adbdb.gif

13. नतीजा

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

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

हां नहीं

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

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

अगला कदम क्या है

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

डेटा फ़ॉर्मैटिंग पर अगला कोडलैब ढूंढें.