พื้นฐานของ Apps Script กับ Google ชีต #3: การทำงานกับข้อมูล

1. บทนำ

ยินดีต้อนรับสู่ส่วนที่ 3 ของเพลย์ลิสต์ Codelab พื้นฐานของ Apps Script กับ Google ชีต

การทำ Codelab นี้จะช่วยให้คุณได้เรียนรู้วิธีใช้การจัดการข้อมูล เมนูที่กำหนดเอง และการดึงข้อมูล API สาธารณะใน Apps Script เพื่อปรับปรุงประสบการณ์การใช้งานชีต คุณจะยังคงทำงานกับคลาส SpreadsheetApp, Spreadsheet, Sheet และ Range ที่โค้ดแล็บก่อนหน้าในเพลย์ลิสต์นี้ได้แนะนำไว้

สิ่งที่คุณจะได้เรียนรู้

  • วิธีนำเข้าข้อมูลจากสเปรดชีตส่วนตัวหรือสเปรดชีตที่แชร์ในไดรฟ์
  • วิธีสร้างเมนูที่กำหนดเองด้วยฟังก์ชัน onOpen()
  • วิธีแยกวิเคราะห์และจัดการค่าข้อมูลสตริงในเซลล์ Google ชีต
  • วิธีดึงและจัดการข้อมูลออบเจ็กต์ JSON จากแหล่งที่มาของ API สาธารณะ

ก่อนเริ่มต้น

นี่คือโค้ดแล็บที่ 3 ในเพลย์ลิสต์พื้นฐานของ Apps Script กับ Google ชีต ก่อนเริ่ม Codelab นี้ โปรดทำ Codelab ก่อนหน้าให้เสร็จก่อน

  1. มาโครและฟังก์ชันที่กำหนดเอง
  2. สเปรดชีต ชีต และช่วง

สิ่งที่คุณต้องมี

  • ความเข้าใจในหัวข้อพื้นฐานของ Apps Script ที่ได้เรียนรู้ใน Codelab ก่อนหน้าของเพลย์ลิสต์นี้
  • คุ้นเคยกับเครื่องมือแก้ไข Apps Script ในระดับพื้นฐาน
  • คุ้นเคยกับ Google ชีต ในระดับพื้นฐาน
  • ความสามารถในการอ่านรูปแบบ A1 ของชีต
  • มีความคุ้นเคยกับ JavaScript และคลาส String ในระดับพื้นฐาน

2. ตั้งค่า

แบบฝึกหัดในโค้ดแล็บนี้ต้องใช้สเปรดชีตในการทำงาน ทําตามขั้นตอนต่อไปนี้เพื่อสร้างสเปรดชีตที่จะใช้ในแบบฝึกหัดเหล่านี้

  1. สร้างสเปรดชีตใน Google ไดรฟ์ คุณทำได้จากอินเทอร์เฟซของไดรฟ์โดยเลือกใหม่ > Google ชีต ซึ่งจะสร้างและเปิดสเปรดชีตใหม่ขึ้น ระบบจะบันทึกไฟล์ไว้ในโฟลเดอร์ไดรฟ์
  2. คลิกชื่อสเปรดชีต แล้วเปลี่ยนจาก "สเปรดชีตที่ไม่มีชื่อ" เป็น "การจัดการข้อมูลและเมนูที่กำหนดเอง" ชีตควรมีลักษณะดังนี้

545c02912de7d112.png

  1. หากต้องการเปิดโปรแกรมแก้ไขสคริปต์ ให้คลิกส่วนขยาย> Apps Script
  2. คลิกชื่อโปรเจ็กต์ Apps Script แล้วเปลี่ยนจาก "โปรเจ็กต์ที่ไม่มีชื่อ" เป็น "การจัดการข้อมูลและเมนูที่กำหนดเอง" คลิกเปลี่ยนชื่อเพื่อบันทึกการเปลี่ยนชื่อ

เมื่อมีสเปรดชีตและโปรเจ็กต์เปล่า คุณก็พร้อมที่จะเริ่มแล็บแล้ว ไปที่ส่วนถัดไปเพื่อเริ่มดูข้อมูลเกี่ยวกับเมนูที่กำหนดเอง

3. ภาพรวม: นำเข้าข้อมูลด้วยรายการเมนูที่กำหนดเอง

Apps Script ช่วยให้คุณกำหนดเมนูที่กำหนดเองซึ่งจะปรากฏใน Google ชีตได้ นอกจากนี้ คุณยังใช้เมนูที่กำหนดเองใน Google เอกสาร, Google สไลด์ และ Google ฟอร์มได้ด้วย เมื่อกำหนดรายการเมนูที่กำหนดเอง คุณจะต้องสร้างป้ายกำกับข้อความและเชื่อมต่อกับฟังก์ชัน Apps Script ในโปรเจ็กต์สคริปต์ จากนั้นคุณจะเพิ่มเมนูลงใน UI เพื่อให้ปรากฏใน Google ชีตได้โดยทำดังนี้

d6b694da6b8c6783.png

เมื่อผู้ใช้คลิกรายการในเมนูที่กำหนดเอง ฟังก์ชัน Apps Script ที่คุณเชื่อมโยงไว้จะทำงาน ซึ่งเป็นวิธีที่รวดเร็วในการเรียกใช้ฟังก์ชัน Apps Script โดยไม่ต้องเปิดตัวแก้ไขสคริปต์ นอกจากนี้ ยังช่วยให้ผู้ใช้คนอื่นๆ ในสเปรดชีตเรียกใช้โค้ดของคุณได้โดยไม่ต้องทราบว่าโค้ดหรือ Apps Script ทำงานอย่างไร สำหรับพวกเขาแล้ว มันก็เป็นเพียงอีกหนึ่งรายการในเมนู

รายการเมนูที่กำหนดเองจะกำหนดไว้ในฟังก์ชัน onOpen() ทริกเกอร์แบบง่าย ซึ่งคุณจะได้เรียนรู้ในส่วนถัดไป

4. ฟังก์ชัน onOpen()

ทริกเกอร์แบบง่ายใน Apps Script เป็นวิธีเรียกใช้โค้ด Apps Script ที่เฉพาะเจาะจงเพื่อตอบสนองต่อเงื่อนไขหรือเหตุการณ์บางอย่าง เมื่อสร้างทริกเกอร์ คุณจะต้องกำหนดเหตุการณ์ที่ทำให้ทริกเกอร์เริ่มทำงาน และระบุฟังก์ชัน Apps Script ที่ทำงานสำหรับเหตุการณ์นั้น

onOpen() เป็นตัวอย่างทริกเกอร์แบบง่าย การตั้งค่าทำได้ง่าย เพียงแค่เขียนฟังก์ชัน Apps Script ที่ชื่อ onOpen() แล้ว 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 ที่แสดงถึงอินเทอร์เฟซผู้ใช้ของสเปรดชีตที่ใช้งานอยู่ซึ่งสคริปต์นี้เชื่อมโยงอยู่

3 บรรทัดถัดไปจะสร้างเมนู (Book-list) เพิ่มรายการเมนู (Load Book-list) ลงในเมนูนั้น แล้วเพิ่มเมนูลงในอินเทอร์เฟซของสเปรดชีต ซึ่งทำได้ด้วยเมธอด createMenu(caption), addItem(caption, functionName) และ addToUi() ตามลำดับ

เมธอด addItem(caption, functionName) จะสร้างการเชื่อมต่อระหว่างป้ายกำกับของรายการเมนูและฟังก์ชัน Apps Script ที่ทำงานเมื่อมีการเลือกรายการเมนู ในกรณีนี้ การเลือกรายการเมนู Load Book-list จะทำให้ชีตพยายามเรียกใช้ฟังก์ชัน loadBookList() (ซึ่งยังไม่มี)

ผลลัพธ์

เรียกใช้ฟังก์ชันนี้ตอนนี้เพื่อดูว่าใช้งานได้

  1. ใน Google ชีต ให้โหลดสเปรดชีตอีกครั้ง หมายเหตุ: โดยปกติแล้วการดำเนินการนี้จะปิดแท็บที่มีโปรแกรมแก้ไขสคริปต์
  2. เปิดโปรแกรมแก้ไขสคริปต์อีกครั้งโดยเลือกเครื่องมือ > โปรแกรมแก้ไขสคริปต์

หลังจากโหลดสเปรดชีตซ้ำแล้ว เมนู Book-list ใหม่ควรปรากฏในแถบเมนู

687dfb214f2930ba.png

การคลิกรายการหนังสือจะแสดงเมนูต่อไปนี้

8a4a391fbabcb16a.png

ส่วนถัดไปจะสร้างโค้ดสำหรับฟังก์ชัน loadBookList() และแนะนำวิธีโต้ตอบกับข้อมูลใน Apps Script ซึ่งก็คือการอ่านสเปรดชีตอื่นๆ

5. นำเข้าข้อมูลสเปรดชีต

เมื่อสร้างเมนูที่กำหนดเองแล้ว คุณจะสร้างฟังก์ชันที่เรียกใช้ได้โดยคลิกรายการเมนู

ตอนนี้เมนูที่กำหนดเอง Book-list มีรายการเมนู 1 รายการคือ 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 เป็นหลัก ซึ่ง Codelab ก่อนหน้านี้ได้แนะนำไว้ เมื่อทราบแนวคิดเหล่านี้แล้ว คุณจะแบ่งloadBookList()โค้ดออกเป็น 4 ส่วนต่อไปนี้ได้

1: ระบุชีตปลายทาง

บรรทัดแรกใช้ SpreadsheetApp.getActiveSheet() เพื่อรับการอ้างอิงไปยังออบเจ็กต์ชีตปัจจุบันและจัดเก็บไว้ในตัวแปร sheet นี่คือชีตที่จะคัดลอกข้อมูลไป

2: ระบุข้อมูลต้นทาง

บรรทัดถัดไปจะสร้างตัวแปร 4 รายการที่อ้างอิงถึงข้อมูลต้นฉบับที่คุณดึงข้อมูล

  • bookSS จัดเก็บการอ้างอิงไปยังสเปรดชีตที่โค้ดอ่านข้อมูล โค้ดจะค้นหาสเปรดชีตตามรหัสของสเปรดชีต ในตัวอย่างนี้ เราได้ระบุรหัสของสเปรดชีตต้นทางเพื่ออ่าน และเปิดสเปรดชีตโดยใช้เมธอด SpreadsheetApp.openById(id)
  • bookSheet จัดเก็บการอ้างอิงไปยังชีตภายใน bookSS ที่มีข้อมูลที่คุณต้องการ โค้ดจะระบุชีตที่จะอ่านตามชื่อ codelab-book-list
  • bookRange จะจัดเก็บการอ้างอิงไปยังช่วงของข้อมูลใน bookSheet เมธอด Sheet.getDataRange() จะแสดงผลช่วงที่มีเซลล์ทั้งหมดที่ไม่ว่างในชีต ซึ่งเป็นวิธีง่ายๆ ในการตรวจสอบว่าคุณได้รับช่วงที่ครอบคลุมข้อมูลทั้งหมดในชีตโดยไม่รวมแถวและคอลัมน์ที่ว่างเปล่า
  • bookListValues คืออาร์เรย์ 2 มิติที่มีค่าทั้งหมดที่นำมาจากเซลล์ใน bookRange เมธอด Range.getValues() จะสร้างอาร์เรย์นี้โดยการอ่านข้อมูลจากชีตต้นทาง

3: คัดลอกข้อมูลจากแหล่งที่มาไปยังปลายทาง

ส่วนโค้ดถัดไปจะคัดลอกbookListValuesข้อมูลลงใน sheet จากนั้นเปลี่ยนชื่อชีตด้วย

  • Sheet.getRange(row, column, numRows, numColumns) ใช้เพื่อระบุตำแหน่งที่จะคัดลอกข้อมูลใน sheet
  • วิธีการ Range.getHeight() และ Range.getWidth() ใช้เพื่อวัดขนาดของข้อมูลและกําหนดช่วงปลายทางที่มีมิติข้อมูลเดียวกัน
  • Range.setValues(values) จะคัดลอกอาร์เรย์ 2 มิติของ bookListValues ลงในช่วงปลายทาง โดยเขียนทับข้อมูลที่มีอยู่แล้ว

4: จัดรูปแบบชีตปลายทาง

Sheet.setName(name) ใช้เพื่อเปลี่ยนชื่อชีตปลายทางเป็น Book-list บรรทัดสุดท้ายในฟังก์ชันใช้ Sheet.autoResizeColumns(startColumn, numColumns) เพื่อปรับขนาด 3 คอลัมน์แรกในชีตปลายทาง ซึ่งช่วยให้คุณอ่านข้อมูลใหม่ได้ง่ายขึ้น

ผลลัพธ์

คุณดูการทำงานของฟังก์ชันนี้ได้ ใน Google ชีต ให้เลือกรายการหนังสือ > โหลดรายการหนังสือเพื่อเรียกใช้ฟังก์ชันเพื่อกรอกข้อมูลในสเปรดชีต

3c797e1e2b9fe641.gif

ตอนนี้คุณมีชีตที่มีรายชื่อชื่อหนังสือ ผู้แต่ง และหมายเลข ISBN แบบ 13 หลักแล้ว ในส่วนถัดไป คุณจะได้เรียนรู้วิธีแก้ไขและอัปเดตข้อมูลในรายการหนังสือนี้โดยใช้การจัดการสตริงและเมนูที่กำหนดเอง

6. ภาพรวม: ล้างข้อมูลสเปรดชีต

ตอนนี้คุณมีข้อมูลหนังสือในชีตแล้ว แต่ละแถวจะอ้างอิงถึงหนังสือที่เฉพาะเจาะจง โดยจะแสดงชื่อ ผู้แต่ง และหมายเลข ISBN ของหนังสือในคอลัมน์แยกกัน อย่างไรก็ตาม คุณอาจเห็นปัญหาบางอย่างเกี่ยวกับข้อมูลดิบนี้ด้วย

  1. สำหรับบางแถว ระบบจะวางชื่อและผู้แต่งไว้ในคอลัมน์ชื่อด้วยกัน โดยเชื่อมโยงด้วยเครื่องหมายคอมมาหรือสตริง "โดย "
  2. บางแถวไม่มีชื่อหนังสือหรือผู้เขียน

ในส่วนถัดไป คุณจะแก้ไขปัญหาเหล่านี้ได้โดยการล้างข้อมูล สำหรับปัญหาแรก คุณจะสร้างฟังก์ชันที่อ่านคอลัมน์ชื่อและแยกข้อความเมื่อใดก็ตามที่พบเครื่องหมายคอมมาหรือตัวคั่น " by " โดยวางสตริงย่อยของผู้แต่งและชื่อที่เกี่ยวข้องในคอลัมน์ที่ถูกต้อง สำหรับปัญหาที่ 2 คุณจะต้องเขียนโค้ดที่จะค้นหาข้อมูลหนังสือที่ขาดหายไปโดยอัตโนมัติโดยใช้ API ภายนอก แล้วเพิ่มข้อมูลนั้นลงในชีต

7. เพิ่มรายการในเมนู

คุณจะต้องสร้างรายการเมนู 3 รายการเพื่อควบคุมการดำเนินการล้างข้อมูลที่จะนำไปใช้

การใช้งาน

มาอัปเดต 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 ชีตมีฟังก์ชัน SPLIT() ที่แบ่งสตริงเป็นคอลัมน์ อย่างไรก็ตาม ชุดข้อมูลมักจะมีปัญหาที่แก้ไขได้ยากด้วยฟังก์ชันในตัวของชีต ในกรณีเหล่านี้ คุณสามารถเขียนโค้ด Apps Script เพื่อดำเนินการที่ซับซ้อนซึ่งจำเป็นต่อการล้างและจัดระเบียบข้อมูลได้

เริ่มล้างข้อมูลโดยการใช้ฟังก์ชันที่ชื่อ splitAtFirstComma() ก่อน ซึ่งจะแบ่งผู้เขียนและชื่อเรื่องลงในเซลล์ที่เกี่ยวข้องเมื่อพบเครื่องหมายคอมมา

ฟังก์ชัน splitAtFirstComma() ควรทำตามขั้นตอนต่อไปนี้

  1. รับช่วงที่แสดงถึงเซลล์ที่เลือกอยู่ในปัจจุบัน
  2. ตรวจสอบว่าเซลล์ในช่วงมีคอมมาหรือไม่
  3. เมื่อพบเครื่องหมายคอมมา ให้แยกสตริงออกเป็น 2 สตริงย่อย (และ 2 สตริงย่อยเท่านั้น) ที่ตำแหน่งของคอมมาตัวแรก เพื่อให้ง่ายขึ้น คุณสามารถถือว่าคอมมาใดๆ แสดงรูปแบบสตริง "[ผู้แต่ง], [ชื่อ]" นอกจากนี้ คุณยังถือได้ว่าหากมีเครื่องหมายคอมมาหลายตัวในเซลล์ ก็ควรแยกสตริงที่คอมมาตัวแรก
  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. บันทึกโปรเจ็กต์สคริปต์

การตรวจสอบโค้ด

มาดูโค้ดใหม่ซึ่งประกอบด้วย 3 ส่วนหลักกัน

1: ดึงค่าชื่อที่ไฮไลต์

3 บรรทัดแรกจะสร้างตัวแปร 3 รายการที่อ้างอิงถึงข้อมูลปัจจุบันในชีต

  • activeRange แสดงช่วงที่ผู้ใช้ไฮไลต์อยู่ในปัจจุบันเมื่อมีการเรียกใช้ฟังก์ชัน splitAtFirstComma() เพื่อให้การฝึกนี้ง่ายขึ้น เราจะถือว่าผู้ใช้ทำเช่นนี้เมื่อไฮไลต์เซลล์ในคอลัมน์ A เท่านั้น
  • titleAuthorRange แสดงถึงช่วงใหม่ที่ครอบคลุมเซลล์เดียวกันกับ activeRange แต่ยังรวมถึงคอลัมน์อีก 1 คอลัมน์ทางด้านขวาด้วย titleAuthorRange สร้างขึ้นโดยใช้วิธี Range.offset(rowOffset, columnOffset, numRows, numColumns) โค้ดต้องใช้ช่วงที่ขยายนี้เนื่องจากต้องมีที่สำหรับใส่ผู้เขียนที่พบในคอลัมน์ชื่อ
  • titleAuthorValues คืออาร์เรย์ 2 มิติของข้อมูลที่ดึงมาจาก titleAuthorRange โดยใช้ Range.getValues()

2: ตรวจสอบแต่ละชื่อและแยกตามคอมมาตัวแรกที่พบ

ส่วนถัดไปจะตรวจสอบค่าใน titleAuthorValues เพื่อหาเครื่องหมายคอมมา JavaScript For Loop ใช้เพื่อตรวจสอบค่าทั้งหมดในคอลัมน์แรกของ titleAuthorValues เมื่อพบสตริงย่อยที่มีคอมมา (", ") โดยใช้เมธอด JavaScript String indexOf() โค้ดจะทําสิ่งต่อไปนี้

  1. ระบบจะคัดลอกค่าสตริงของเซลล์ไปยังตัวแปร titlesAndAuthors
  2. ระบบจะกำหนดตำแหน่งเครื่องหมายคอมมาโดยใช้วิธี JavaScript String indexOf()
  3. ระบบจะเรียกใช้เมธอด JavaScript String slice() 2 ครั้งเพื่อรับสตริงย่อยก่อนตัวคั่นเครื่องหมายคอมมาและสตริงย่อยหลังตัวคั่น
  4. ระบบจะคัดลอกสตริงย่อยกลับไปยังอาร์เรย์ 2 มิติ titleAuthorValues โดยเขียนทับค่าที่มีอยู่ที่ตำแหน่งนั้น เนื่องจากเราใช้รูปแบบ "[ผู้เขียน], [ชื่อ]" จึงมีการกลับลำดับของสตริงย่อย 2 รายการเพื่อใส่ชื่อในคอลัมน์แรกและผู้เขียนในคอลัมน์ที่ 2

หมายเหตุ: เมื่อโค้ดไม่พบเครื่องหมายคอมมา โค้ดจะปล่อยให้ข้อมูลในแถวไม่เปลี่ยนแปลง

3: คัดลอกค่าใหม่กลับไปวางในชีต

เมื่อตรวจสอบค่าเซลล์ของภาพยนตร์/รายการทีวีทั้งหมดแล้ว ระบบจะคัดลอกอาร์เรย์ 2 มิติ titleAuthorValues ที่อัปเดตแล้วกลับไปยังสเปรดชีตโดยใช้เมธอด Range.setValues(values)

ผลลัพธ์

ตอนนี้คุณจะเห็นผลลัพธ์ของฟังก์ชัน splitAtFirstComma() ในการใช้งานจริง ลองเรียกใช้โดยเลือกรายการเมนูแยกชื่อ/ผู้แต่งที่เครื่องหมายคอมมาแรกหลังจากเลือก...

...เซลล์เดียว:

a24763b60b305376.gif

...หรือหลายเซลล์

89c5c89b357d3713.gif

ตอนนี้คุณได้สร้างฟังก์ชัน Apps Script ที่ประมวลผลข้อมูลชีตแล้ว จากนั้นคุณจะใช้ฟังก์ชันตัวแยกที่ 2

9. แยกข้อความตามตัวคั่น "by"

เมื่อดูข้อมูลเดิม คุณจะเห็นปัญหาอีกอย่างหนึ่ง ในขณะที่รูปแบบข้อมูลบางรูปแบบจัดรูปแบบชื่อและผู้แต่งในเซลล์เดียวเป็น "[ผู้แต่ง], [ชื่อ]" เซลล์อื่นๆ จะจัดรูปแบบผู้แต่งและชื่อเป็น "[ชื่อ] โดย [ผู้แต่ง]"

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.lastIndexOf(substring) ของ JavaScript แทน String.indexOf(substring) ซึ่งหมายความว่าหากมีสตริงย่อย " by " หลายรายการในสตริงเริ่มต้น ระบบจะถือว่าสตริงย่อย " by " ทั้งหมด ยกเว้นสตริงย่อยสุดท้าย เป็นส่วนหนึ่งของชื่อ
  3. หลังจากแยกสตริงแล้ว ระบบจะตั้งค่าสตริงย่อยแรกเป็นชื่อและสตริงย่อยที่ 2 เป็นผู้แต่ง (ซึ่งเป็นลำดับที่ตรงกันข้ามกับ splitAtFirstComma())

ผลลัพธ์

ตอนนี้คุณจะเห็นผลลัพธ์ของฟังก์ชัน splitAtLastBy() ในการใช้งานจริง ลองเรียกใช้โดยเลือกรายการเมนูแยกชื่อ/ผู้แต่งที่ "โดย" สุดท้ายหลังจากเลือก...

...เซลล์เดียว:

4e6679e134145975.gif

...หรือหลายเซลล์

3c879c572c61e62f.gif

คุณทำ Codelab ส่วนนี้เสร็จแล้ว ตอนนี้คุณใช้ Apps Script เพื่ออ่านและแก้ไขข้อมูลสตริงในชีต รวมถึงใช้เมนูที่กำหนดเองเพื่อเรียกใช้คำสั่ง Apps Script ต่างๆ ได้แล้ว

ในส่วนถัดไป คุณจะได้ดูวิธีปรับปรุงชุดข้อมูลนี้เพิ่มเติมโดยการกรอกข้อมูลในเซลล์ว่างด้วยข้อมูลที่ดึงมาจาก API สาธารณะ

10. ภาพรวม: รับข้อมูลจาก API สาธารณะ

จนถึงตอนนี้ คุณได้ปรับแต่งชุดข้อมูลเพื่อแก้ไขปัญหาการจัดรูปแบบชื่อและผู้แต่งบางอย่างแล้ว แต่ชุดข้อมูลยังขาดข้อมูลบางอย่างที่ไฮไลต์ในเซลล์ด้านล่าง

af0dba8cb09d1a49.png

คุณไม่สามารถรับข้อมูลที่ขาดหายไปได้โดยใช้การดำเนินการสตริงกับข้อมูลที่คุณมีอยู่ในปัจจุบัน แต่คุณจะต้องรับข้อมูลที่ขาดหายไปจากแหล่งอื่นแทน คุณทำได้ใน Apps Script โดยการขอข้อมูลจาก API ภายนอกที่ให้ข้อมูลเพิ่มเติมได้

API คือ Application Programming Interface ซึ่งเป็นคำทั่วไป แต่โดยพื้นฐานแล้วเป็นบริการที่โปรแกรมและสคริปต์ของคุณเรียกใช้เพื่อขอข้อมูลหรือดำเนินการบางอย่างได้ ในส่วนนี้ คุณกำลังเรียกใช้ API ที่เผยแพร่ต่อสาธารณะเพื่อขอข้อมูลหนังสือที่คุณสามารถแทรกลงในเซลล์ว่างในชีตได้

ส่วนนี้จะสอนวิธีทำสิ่งต่อไปนี้

  • ขอข้อมูลหนังสือจากแหล่ง API ภายนอก
  • ดึงข้อมูลชื่อและผู้แต่งจากข้อมูลที่ส่งคืน แล้วเขียนลงในสเปรดชีต

11. ดึงข้อมูลภายนอกด้วย UrlFetch

ก่อนที่จะเจาะลึกโค้ดที่ทำงานกับสเปรดชีตโดยตรง คุณสามารถดูข้อมูลเกี่ยวกับการทำงานกับ API ภายนอกใน Apps Script ได้โดยการสร้างฟังก์ชันช่วยสำหรับการขอข้อมูลหนังสือจาก Open Library API สาธารณะโดยเฉพาะ

ฟังก์ชันตัวช่วย fetchBookData_(ISBN) จะใช้หมายเลข ISBN 13 หลักของหนังสือเป็นพารามิเตอร์และแสดงข้อมูลเกี่ยวกับหนังสือเล่มนั้น โดยจะเชื่อมต่อและดึงข้อมูลจาก 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. บันทึกโปรเจ็กต์สคริปต์

การตรวจสอบโค้ด

โค้ดนี้แบ่งออกเป็น 2 ส่วนหลักๆ ดังนี้

1: คำขอ API

ใน 2 บรรทัดแรก fetchBookData_(ISBN) จะเชื่อมต่อกับ Open Library API สาธารณะโดยใช้ปลายทาง URL ของ API และบริการดึงข้อมูล URL ของ Apps Script

ตัวแปร url เป็นเพียงสตริง URL เช่นเดียวกับที่อยู่เว็บ ซึ่งชี้ไปยังตำแหน่งบนเซิร์ฟเวอร์ Open Library นอกจากนี้ ยังมีพารามิเตอร์ 3 รายการ (bibkeys, jscmd และ format) ที่จะบอกเซิร์ฟเวอร์ Open Library ว่าคุณกำลังขอข้อมูลใดและควรจัดโครงสร้างการตอบกลับอย่างไร ในกรณีนี้ คุณระบุหมายเลข ISBN ของหนังสือและขอให้ส่งคืนข้อมูลโดยละเอียดในรูปแบบ JSON

เมื่อสร้างสตริง URL แล้ว โค้ดจะส่งคำขอไปยังตำแหน่งและรับการตอบกลับ ซึ่งทำได้ด้วยเมธอด UrlFetchApp.fetch(url, params) โดยจะส่งคำขอข้อมูลไปยัง URL ภายนอกที่คุณระบุ และจัดเก็บการตอบกลับที่ได้ในตัวแปร response นอกจาก URL แล้ว โค้ดยังตั้งค่าพารามิเตอร์ที่ไม่บังคับ muteHttpExceptions เป็น true ด้วย การตั้งค่านี้หมายความว่าโค้ดจะไม่หยุดทำงานหากคำขอทำให้เกิดข้อผิดพลาดของ API แต่จะแสดงการตอบกลับข้อผิดพลาดแทน

คำขอจะแสดงออบเจ็กต์ HTTPResponse ที่จัดเก็บไว้ในตัวแปร response การตอบกลับ HTTP ประกอบด้วยรหัสการตอบกลับ ส่วนหัว HTTP และเนื้อหาการตอบกลับหลัก ข้อมูลที่สนใจในที่นี้คือเนื้อหา JSON หลัก ดังนั้นโค้ดต้องดึงข้อมูลดังกล่าวออกมา จากนั้นจึงแยกวิเคราะห์ JSON เพื่อค้นหาและแสดงข้อมูลที่ต้องการ

2: แยกวิเคราะห์การตอบกลับจาก API และแสดงข้อมูลที่สนใจ

ในโค้ด 3 บรรทัดสุดท้าย เมธอด HTTPResponse.getContentText() จะแสดงเนื้อหาหลักของการตอบกลับเป็นสตริง สตริงนี้อยู่ในรูปแบบ JSON แต่ Open Library API จะกำหนดเนื้อหาและรูปแบบที่แน่นอน เมธอด JSON.parse(jsonString) จะแปลงสตริง JSON เป็นออบเจ็กต์ JavaScript เพื่อให้ดึงข้อมูลส่วนต่างๆ ได้ง่าย สุดท้าย ฟังก์ชันจะแสดงผลข้อมูลที่สอดคล้องกับหมายเลข ISBN ของหนังสือ

ผลลัพธ์

เมื่อใช้ fetchBookData_(ISBN) แล้ว ฟังก์ชันอื่นๆ ในโค้ดจะค้นหาข้อมูลของหนังสือเล่มใดก็ได้โดยใช้หมายเลข ISBN คุณจะใช้ฟังก์ชันนี้เพื่อช่วยกรอกข้อมูลในเซลล์ในสเปรดชีต

12. เขียนข้อมูล API ลงในสเปรดชีต

ตอนนี้คุณสามารถใช้ฟังก์ชัน fillInTheBlanks() ที่ทำสิ่งต่อไปนี้ได้แล้ว

  1. ระบุข้อมูลชื่อและผู้แต่งที่ขาดหายไปภายในช่วงข้อมูลที่ใช้งานอยู่
  2. ดึงข้อมูลที่ขาดหายไปของหนังสือที่ต้องการโดยเรียกใช้ Open Library API โดยใช้เมธอดตัวช่วย 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. บันทึกโปรเจ็กต์สคริปต์

การตรวจสอบโค้ด

โค้ดนี้แบ่งออกเป็น 3 ส่วนดังนี้

1: อ่านข้อมูลหนังสือที่มีอยู่

บรรทัดแรก 3 บรรทัดของฟังก์ชันจะกำหนดค่าคงที่เพื่อช่วยให้โค้ดอ่านง่ายขึ้น ใน 2 บรรทัดถัดไป ตัวแปร bookValues จะใช้เพื่อเก็บสำเนาข้อมูลหนังสือของชีตไว้ในเครื่อง โค้ดจะอ่านข้อมูลจาก bookValues ใช้ API เพื่อกรอกข้อมูลที่ขาดหายไป และเขียนค่าเหล่านี้กลับไปยังสเปรดชีต

2: ดึงข้อมูลที่ขาดหายไปโดยใช้ฟังก์ชันตัวช่วย

โค้ดจะวนซ้ำในแต่ละแถวใน bookValues เพื่อค้นหาชื่อหรือผู้แต่งที่ขาดหายไป หากต้องการลดจำนวนการเรียก API ขณะที่ปรับปรุงประสิทธิภาพ โค้ดจะเรียก API ก็ต่อเมื่อเงื่อนไขต่อไปนี้เป็นจริง

  1. คอลัมน์ ISBN ของแถวมีค่า
  2. เซลล์ชื่อหรือผู้แต่งในแถวว่างเปล่า

หากเงื่อนไขเป็นจริง โค้ดจะเรียกใช้ API โดยใช้ฟังก์ชันตัวช่วย fetchBookData_(isbn) ที่คุณติดตั้งใช้งานไว้ก่อนหน้านี้ และจัดเก็บผลลัพธ์ไว้ในตัวแปร bookData ตอนนี้ควรมีข้อมูลที่ขาดหายไปซึ่งคุณต้องการแทรกลงในชีตแล้ว

งานที่เหลืออยู่คือการเพิ่มข้อมูล bookData ลงในสเปรดชีต แต่ก็มีข้อควรระวัง น่าเสียดายที่บางครั้ง API สาธารณะ เช่น Open Library Book API อาจไม่มีข้อมูลที่คุณขอ หรืออาจมีปัญหาอื่นๆ ที่ทำให้ไม่สามารถให้ข้อมูลได้ หากคุณคิดว่าคำขอ API ทุกรายการจะสำเร็จ โค้ดของคุณจะมีความแข็งแกร่งไม่เพียงพอที่จะจัดการข้อผิดพลาดที่ไม่คาดคิด

เพื่อให้มั่นใจว่าโค้ดของคุณสามารถจัดการข้อผิดพลาดของ API ได้ โค้ดจะต้องตรวจสอบว่าการตอบกลับจาก API นั้นถูกต้องก่อนที่จะพยายามใช้ เมื่อมีรหัส bookData แล้ว ระบบจะตรวจสอบอย่างง่ายเพื่อยืนยันว่ามี bookData และ bookData.details อยู่ก่อนที่จะพยายามอ่านจากรหัสเหล่านั้น หากไม่มีข้อมูลใดข้อมูลหนึ่ง แสดงว่า API ไม่มีข้อมูลที่คุณต้องการ ในกรณีนี้ คำสั่ง continue จะบอกให้โค้ดข้ามแถวนั้นไป คุณจะกรอกข้อมูลในเซลล์ที่ขาดหายไปไม่ได้ แต่สคริปต์จะไม่ขัดข้อง

3: เขียนข้อมูลที่อัปเดตกลับลงในชีต

ส่วนสุดท้ายของโค้ดมีการตรวจสอบที่คล้ายกันเพื่อยืนยันข้อมูลชื่อและผู้แต่งที่ API แสดงผล โค้ดจะอัปเดตอาร์เรย์ bookValues ก็ต่อเมื่อเซลล์ชื่อหรือผู้แต่งเดิมว่างเปล่า และ API แสดงผลค่าที่คุณวางในเซลล์นั้นได้

ลูปจะออกหลังจากตรวจสอบแถวทั้งหมดในชีตแล้ว ขั้นตอนสุดท้ายคือการเขียนอาร์เรย์ bookValues ที่อัปเดตแล้วกลับไปยังสเปรดชีตโดยใช้ Range.setValues(values)

ผลลัพธ์

ตอนนี้คุณสามารถทำความสะอาดข้อมูลหนังสือให้เสร็จสมบูรณ์ได้แล้ว ทำสิ่งต่อไปนี้:

  1. หากยังไม่ได้ทำ ให้ไฮไลต์ช่วง A2:A15 ในชีต แล้วเลือกรายการหนังสือ > แยกชื่อ/ผู้แต่งที่เครื่องหมายคอมมาแรกเพื่อแก้ไขปัญหาเครื่องหมายคอมมา
  2. หากยังไม่ได้ทำ ให้ไฮไลต์ช่วง A2:A15 ในชีต แล้วเลือกรายการหนังสือ > แยกชื่อ/ผู้แต่งที่ "โดย" สุดท้ายเพื่อแก้ไขปัญหา "โดย"
  3. หากต้องการกรอกข้อมูลในเซลล์ที่เหลือทั้งหมด ให้เลือกรายการหนังสือ > กรอกข้อมูลในเซลล์ชื่อและผู้แต่งที่ว่าง

826675a3437adbdb.gif

13. บทสรุป

ขอแสดงความยินดีที่คุณทำ Codelab นี้เสร็จสมบูรณ์ คุณได้เรียนรู้วิธีสร้างเมนูที่กำหนดเองเพื่อเปิดใช้งานส่วนต่างๆ ของโค้ด Apps Script แล้ว นอกจากนี้ คุณยังได้เห็นวิธีนำเข้าข้อมูลไปยัง Google ชีตโดยใช้บริการ Apps Script และ API สาธารณะ การดำเนินการนี้เป็นเรื่องปกติในการประมวลผลสเปรดชีต และ Apps Script ช่วยให้คุณนำเข้าข้อมูลจากแหล่งที่มาที่หลากหลายได้ สุดท้ายนี้ คุณได้เห็นวิธีใช้บริการ Apps Script และ JavaScript เพื่ออ่าน ประมวลผล และแทรกข้อมูลสเปรดชีตแล้ว

คุณคิดว่า Codelab นี้มีประโยชน์ไหม

ใช่ ไม่

สิ่งที่คุณได้เรียนรู้

  • วิธีนำเข้าข้อมูลจากสเปรดชีตใน Google
  • วิธีสร้างเมนูที่กำหนดเองในฟังก์ชัน onOpen()
  • วิธีแยกวิเคราะห์และจัดการค่าข้อมูลสตริง
  • วิธีเรียก API สาธารณะโดยใช้บริการเรียก URL
  • วิธีแยกวิเคราะห์ข้อมูลออบเจ็กต์ JSON ที่ดึงมาจากแหล่ง API สาธารณะ

ขั้นตอนถัดไป

Codelab ถัดไปในเพลย์ลิสต์นี้จะอธิบายวิธีจัดรูปแบบข้อมูลภายในสเปรดชีตอย่างละเอียดมากขึ้น

ดู Codelab ถัดไปได้ที่การจัดรูปแบบข้อมูล