พื้นฐานของ Apps Script กับ Google ชีต #1: มาโครและฟังก์ชันที่กำหนดเอง

1. ยินดีต้อนรับสู่ Apps Script

Apps Script คืออะไร

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

ฟีเจอร์ของ Apps Script มีดังนี้

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

เพลย์ลิสต์ Codelab พื้นฐานของ Apps Script กับ Google ชีตนี้จะสอนพื้นฐานของ Apps Script และวิธีใช้เพื่อปรับปรุงประสบการณ์การใช้งาน Google ชีต Codelab นี้มุ่งเน้นการสอนพื้นฐานของ Apps Script

บริการสเปรดชีต

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

  • สร้างหรือแก้ไขสเปรดชีต
  • อ่านและอัปเดตข้อมูล สูตร และการจัดรูปแบบเซลล์
  • สร้างปุ่มและเมนูที่กำหนดเอง
  • นำเข้าและส่งออกข้อมูลจากแอปพลิเคชันอื่นๆ ของ Google หรือแหล่งที่มาของบุคคลที่สาม
  • แชร์และควบคุมสิทธิ์เข้าถึงสเปรดชีต

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

เพลย์ลิสต์นี้ครอบคลุมหัวข้อทั้งหมดที่คุณต้องใช้เพื่อเริ่มต้นใช้งาน Apps Script กับ Google ชีต

  1. มาโครและฟังก์ชันที่กำหนดเอง
  2. สเปรดชีต ชีต และช่วง
  3. การทำงานกับข้อมูล
  4. การจัดรูปแบบข้อมูล
  5. สร้างแผนภูมิและนำเสนอข้อมูลในสไลด์

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

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

2. บทนำ

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

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

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

โปรดอ่านข้อมูลด้านล่างเพื่อดูแนวคิดและข้อกำหนดที่เกี่ยวข้องกับโค้ดแล็บนี้

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

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

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

  • มีความรู้พื้นฐานเกี่ยวกับ JavaScript
  • คุ้นเคยกับ Google ชีต ในระดับพื้นฐาน
  • ความสามารถในการอ่านรูปแบบ A1 ของชีต

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

3. สร้างมาโครในชีต

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

ในส่วนนี้ คุณจะได้เรียนรู้วิธีสร้างมาโครในชีต ในส่วนถัดไป คุณจะเห็นวิธีสร้างมาโครโดยใช้ Apps Script

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

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

5b8aded1bb349ecf.png

ระบบจะวางสำเนาของสเปรดชีตตัวอย่างเพื่อให้คุณใช้ในโฟลเดอร์ Google ไดรฟ์และตั้งชื่อว่า "สำเนาของภาพยนตร์ 10 อันดับแรกที่ทำรายได้สูงสุด (2018)"

สร้างมาโคร

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

  1. คลิกเซลล์ A1 เพื่อวางเคอร์เซอร์ในแถว นี่คือแถวส่วนหัว
  2. ในเมนู ให้เลือกส่วนขยาย> มาโคร> บันทึกมาโคร

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

  1. ในกล่องโต้ตอบมาโคร ให้เลือกการอ้างอิงแบบสัมพัทธ์

c59f2f12317352d2.gif

  1. เลือกแถวที่ 1

1d782ee30c66a02b.gif

  1. เปลี่ยนสีสีเติมของแถวบนจากสีขาวเป็นสีม่วงเข้ม 3

f7e7abaf76e338c7.png

  1. เปลี่ยนสีข้อความของแถวบนจากสีดำเป็นสีขาว

d5e630acbe83148.png

  1. หากต้องการทำตัวหนา ให้กด Ctrl+B (หรือ Cmd+B ใน macOS)
  2. หากต้องการตรึงแถวบนสุด ให้เลือกมุมมอง > ตรึง > 1 แถว

97cb244ffebe8953.png

  1. คลิกบันทึกในกล่องโต้ตอบมาโคร กล่องโต้ตอบใหม่จะขอให้คุณตั้งชื่อมาโคร ป้อนชื่อ "ส่วนหัว" แล้วคลิกบันทึก

b4610a54340da518.gif

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

4ed7fbed18ea3681.png

เปิดใช้งานมาโคร

คุณใช้มาโครใหม่ในชีตได้โดยทำตามวิธีการต่อไปนี้

  1. หากต้องการสร้างชีต ให้คลิกเพิ่มชีต 9c9b0c19bf317e7f.png

927c012b4e11475b.png

  1. ในชีตใหม่ ให้เพิ่มข้อความบางส่วนลงใน A1:C2 คุณสามารถทำตามตัวอย่างอินพุตด้านล่างได้

c3aadaef52a609bf.png

  1. ไฮไลต์แถวแรก

cfe36fcf833d0bd7.gif

  1. หากต้องการใช้มาโครกับพื้นที่ที่เลือก ให้คลิกส่วนขยาย> มาโคร> ส่วนหัว
  2. ให้สิทธิ์มาโครโดยทำตามวิธีการบนหน้าจอ
  1. ทำขั้นตอนที่ 4 ซ้ำเพื่อเรียกใช้มาโครอีกครั้ง (การให้สิทธิ์จะหยุดการดำเนินการครั้งแรก)

ยินดีด้วย คุณได้เรียนรู้วิธีใช้มาโครในชีตแล้ว สเปรดชีตควรมีลักษณะดังนี้

7c7130a4a697bd92.png

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

4. มาโครในโปรแกรมแก้ไขสคริปต์

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

เครื่องมือแก้ไขสคริปต์

ตอนนี้คุณสร้างมาโครแล้ว คุณสามารถดูโค้ดของมาโครได้ หากต้องการดูสคริปต์มาโคร ให้คลิกส่วนขยาย> Apps Script เพื่อเปิดโปรแกรมแก้ไขโค้ดในเบราว์เซอร์สำหรับ Apps Script

เครื่องมือแก้ไขสคริปต์ช่วยให้คุณเขียนโค้ดใน Apps Script และเรียกใช้สคริปต์เหล่านั้นในเซิร์ฟเวอร์ของ Google ได้

การวิเคราะห์ macros.gs

ตรวจสอบสคริปต์ปัจจุบัน ชีตได้สร้างไฟล์สคริปต์ macros.gs เมื่อคุณบันทึกมาโคร Header โดยจะกรอกข้อมูลด้วยฟังก์ชัน Apps Script ที่เกี่ยวข้องซึ่งเรียกว่า Header เมื่อเปิดใช้งานมาโคร Header ชีตจะเรียกใช้ฟังก์ชันนี้

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

5d653a69a0897adf.png

บรรทัดแรกคือความคิดเห็นในคำอธิบายประกอบที่มีผลต่อการให้สิทธิ์

/** @OnlyCurrentDoc */

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

หากต้องการทำความเข้าใจวิธีที่ Apps Script แสดงคำสั่งของมาโคร ให้ดูฟังก์ชันต่อไปนี้

function Header(){
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(
    spreadsheet.getCurrentCell().getRow(),
    1, 1, sheet.getMaxColumns()).activate();
  spreadsheet.getActiveRangeList().setBackground('#4c1130')
  .setFontColor('#ffffff')
  .setFontWeight('bold');
  spreadsheet.getActiveSheet().setFrozenRows(1);
};

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

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

var spreadsheet = SpreadsheetApp.getActive();

ในที่นี้ getActive() จะแสดงออบเจ็กต์ที่แสดงไฟล์สเปรดชีตที่ใช้งานอยู่ปัจจุบันในชีตและตั้งค่าเป็นตัวแปรใหม่ spreadsheet

var sheet = spreadsheet.getActiveSheet();
sheet.getRange(
    spreadsheet.getCurrentCell().getRow(),
    1, 1, sheet.getMaxColumns()).activate();

บรรทัดเหล่านี้สอดคล้องกับการคลิกแถวแรกเพื่อไฮไลต์ ซึ่งเรียกว่าการเปิดใช้งาน บรรทัดแรกจะจัดเก็บชีตปัจจุบันในตัวแปร sheet ส่วนบรรทัดที่ 2 จะรับทั้งแถวแรกโดยใช้วิธี getRange() จากนั้นเรียกใช้ activate() เพื่อเปิดใช้งาน แถวแรกจะระบุโดยใช้หมายเลขแถวและคอลัมน์ที่เฉพาะเจาะจง spreadsheet.getCurrentCell().getRow() จะแสดงผลหมายเลขของแถวปัจจุบัน ส่วน sheet.getMaxColumns() จะแสดงผลจำนวนคอลัมน์สูงสุดในชีต

spreadsheet.getActiveRangeList().setBackground('#4c1130')
.setFontColor('#ffffff')
.setFontWeight('bold');

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

  • getActiveRangeList() จะแสดงผล RangeList ที่ใช้งานอยู่ในปัจจุบันใน spreadsheet ในกรณีนี้ ก็คือแถวแรกที่บรรทัดก่อนหน้าเปิดใช้งาน
  • ทั้งเมธอด setBackground(color) และ setFontColor(color) จะเปลี่ยนแอตทริบิวต์สีของเซลล์ในช่วงที่ใช้งานอยู่
  • setFontWeight(fontWeight) ปรับน้ำหนักแบบอักษรของเซลล์ในช่วงที่ใช้งานอยู่

สุดท้าย บรรทัดสุดท้ายจะตรึงแถวแรกของมาโคร

spreadsheet.getActiveSheet().setFrozenRows(1);

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

ส่วนถัดไปจะมุ่งเน้นที่การจัดการโค้ดของฟังก์ชัน Header() เพื่อแสดงให้เห็นวิธีใช้เครื่องมือแก้ไขสคริปต์เพื่อปรับแต่งมาโครเพิ่มเติม

ปรับแต่งมาโครด้วย Apps Script

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

เปลี่ยนเซลล์ที่ได้รับผลกระทบ

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

  1. ในตัวแก้ไขสคริปต์ ให้แทนที่ sheet.getMaxColumns() ด้วย 10 การแก้ไขนี้จะเปลี่ยนช่วงของเซลล์ที่มาโครมีผลในสเปรดชีต
/** @OnlyCurrentDoc */

function Header(){
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(
    spreadsheet.getCurrentCell().getRow(),
    1, 1, 10).activate();
    /* sheet.getMaxColumns() replaced with 10.*/
  spreadsheet.getActiveRangeList().setBackground('#4c1130')
  .setFontColor('#ffffff')
  .setFontWeight('bold');
  spreadsheet.getActiveSheet().setFrozenRows(1);
}
  1. หากต้องการบันทึกสคริปต์ ให้คลิกบันทึก เซฟ
  2. หากต้องการเปลี่ยนชื่อโปรเจ็กต์ ให้ป้อน "มาโครและฟังก์ชันที่กำหนดเอง" เป็นชื่อโปรเจ็กต์ใหม่ แล้วคลิกเปลี่ยนชื่อ
  3. หากต้องการสร้างชีต ให้คลิกเพิ่มชีต 9c9b0c19bf317e7f.png ในชีต

927c012b4e11475b.png

  1. ในตัวแก้ไขสคริปต์ ให้เลือก Header จากรายการฟังก์ชัน แล้วคลิกเรียกใช้

ในชีตใหม่ คุณควรเห็นผลลัพธ์ต่อไปนี้

8a58ba02535b2b9c.png

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

ต่อไปมาดูวิธีปรับแต่งสีมาโครกัน

เปลี่ยนสีของมาโคร

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

วิธีการเหล่านี้จะเน้นการเปลี่ยนสีพื้นหลังของมาโคร

  1. ในชีต ให้เปลี่ยนกลับไปที่ชีตที่มีข้อมูลต้นฉบับ (ชีต 1)
  2. คลิกแถวแรกเพื่อไฮไลต์
  3. ในตัวแก้ไขสคริปต์ ให้แทนที่สีพื้นหลัง #4c1130 ด้วย #afeeee ค่าเหล่านี้แสดงถึงสีต่างๆ โดยใช้สัญกรณ์เลขฐาน 16 3 ตัว
/** @OnlyCurrentDoc */

function Header(){
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(
    spreadsheet.getCurrentCell().getRow(),
    1, 1, 10).activate();
  spreadsheet.getActiveRangeList().setBackground('#afeeee')
    /* #4c1130 replaced with #afeeee.*/
  .setFontColor('#ffffff')
  .setFontWeight('bold');
  spreadsheet.getActiveSheet().setFrozenRows(1);
}
  1. หากต้องการบันทึกสคริปต์ ให้คลิกบันทึก เซฟ
  2. เลือก Header จากรายการฟังก์ชัน แล้วคลิกเรียกใช้

ในชีต สีเติมพื้นหลังของ 10 คอลัมน์แรกในแถวแรกจะเปลี่ยนเป็นสีเทอร์ควอยซ์ที่กำหนดเอง

bbd26f7c8e35039.png

การเปลี่ยนสัญกรณ์สีฐานสิบหกในพารามิเตอร์ของ setBackground(color) จาก #4c1130 (สีม่วงเข้ม 3) เป็น #afeeee (สีเทอร์ควอยซ์อ่อน ซึ่งเป็นตัวเลือกที่เข้าถึงไม่ได้ในเมนูสีเริ่มต้นของชีต) จะเปลี่ยนแอตทริบิวต์สีของสีพื้นหลังของมาโคร

ตอนนี้คุณได้แก้ไขชุดสีพื้นหลังที่มาโครตั้งค่าไว้แล้ว หากต้องการเปลี่ยนสีข้อความด้วย ให้เปลี่ยนรหัสสีที่ 2

  1. ในชีต ให้คลิกแถวแรกเพื่อให้แน่ใจว่ายังคงไฮไลต์อยู่
  2. ในตัวแก้ไขสคริปต์ ให้แทนที่สีแบบอักษร #ffffff ด้วย #191970 ซึ่งจะทำให้มาโครตั้งค่าสีแบบอักษรเป็นสีน้ำเงินเข้ม
/** @OnlyCurrentDoc */

function Header(){
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(
    spreadsheet.getCurrentCell().getRow(),
    1, 1, 10).activate();
  spreadsheet.getActiveRangeList().setBackground('#afeeee')
  .setFontColor('#191970')/* #ffffff replaced with #191970.*/
  .setFontWeight('bold');
  spreadsheet.getActiveSheet().setFrozenRows(1);
}
  1. หากต้องการบันทึกสคริปต์ ให้คลิกบันทึก เซฟ
  2. เลือก Header จากรายการฟังก์ชัน แล้วคลิกเรียกใช้

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

2eaf2fb4879e1b36.png

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

5. เขียนโค้ดสคริปต์แรก: ฟังก์ชันที่กำหนดเอง

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

ส่วนนี้จะแสดงวิธีสร้างฟังก์ชันที่กำหนดเองใน Apps Script ซึ่งทำการแปลงค่าเงิน

สร้างไฟล์สคริปต์

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

  1. หากต้องการสร้างไฟล์ Apps Script ให้กลับไปที่ตัวแก้ไขสคริปต์
  2. คลิกเพิ่มไฟล์ เพิ่มไฟล์ > สคริปต์ข้างไฟล์
  3. ตั้งชื่อไฟล์สคริปต์ใหม่เป็น customFunctions แล้วกด Enter (Apps Script จะต่อท้ายนามสกุล .gs ให้กับชื่อไฟล์สคริปต์โดยอัตโนมัติ)

แท็บใหม่ชื่อ customFunctions.gs จะปรากฏในโปรแกรมแก้ไข

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

แปลงดอลลาร์สหรัฐเป็นฟรังก์สวิส

สมมติว่าคุณต้องการแก้ไขข้อมูลสำหรับ "ภาพยนตร์ 10 อันดับแรกที่ทำรายได้สูงสุดในปี 2018" เพื่อแสดงไม่เพียงแต่ค่ารายได้รวมทั่วโลกในสกุลเงินดอลลาร์สหรัฐ แต่ยังแสดงในสกุลเงินฟรังก์สวิสด้วย ฟังก์ชันที่กำหนดเองจะช่วยให้คุณทำสิ่งนี้ได้อย่างง่ายดาย แบบฝึกหัดต่อไปนี้แสดงวิธีสร้างฟังก์ชันที่กำหนดเองเพื่อแปลงค่าเงินดอลลาร์เป็นค่าเงินฟรังก์โดยใช้คณิตศาสตร์

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

  1. ในชีต ให้คลิกขวาที่คอลัมน์ H
  2. ในเมนูที่ปรากฏขึ้น ให้คลิกแทรก 1 ขวา

เมนูแสดง "แทรก 1 ทางขวา"

  1. ติดป้ายกำกับคอลัมน์ "Worldwide_Gross (Swiss francs)" ในเซลล์ I1

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

  1. ใน customFunctions.gs ให้แทนที่โค้ดสำหรับ myFunction() ด้วยโค้ดต่อไปนี้
/**
 * Converts US dollars to Swiss francs.
 *
 * @param {number} dollars The total number of dollars.
 * @return {number} swissFrancs The converted total of Swiss francs.
 * @customfunction
 */
function USDTOCHF(dollars){
  var swissFrancs = dollars * .99; 
  return swissFrancs;
}

นี่คือโค้ดที่จะแปลงดอลลาร์สหรัฐเป็นฟรังก์สวิส ลองทำตามวิธีการด้านล่างเพื่อดูวิธีเรียกใช้ฟังก์ชันที่กำหนดเองในชีต

  1. หากต้องการบันทึกสคริปต์ ให้คลิกบันทึก เซฟ
  2. ในชีต ให้เลือกเซลล์ I2
  3. ป้อน =USDTOCHF(H2) ในแถบฟังก์ชัน

วิธีใช้สูตรกับเซลล์ที่เหลือในคอลัมน์

  1. เลื่อนเคอร์เซอร์ไปที่มุมขวาล่างของเซลล์ I2 แล้วเลือกกล่องสีน้ำเงินเล็กๆ (เคอร์เซอร์ควรเปลี่ยนเป็น 9c9b0c19bf317e7f.png เมื่อชี้ไปที่กล่องสีน้ำเงิน)
  2. ลากกล่องสีน้ำเงินลงเพื่อไฮไลต์ช่วง I3:I11

3cf46560d6cea0de.gif

ตอนนี้คอลัมน์ I แสดง Conversion ของฟรังก์สวิสจากมูลค่าดอลลาร์สหรัฐในคอลัมน์ H

7fc06b3d7e3e2a9.png

ยินดีด้วย คุณสร้างฟังก์ชันที่กำหนดเองแรกแล้ว ส่วนถัดไปจะอธิบายโค้ดที่ประกอบขึ้นเป็น USDTOCHF()

การวิเคราะห์ USDTOCHF()

ความคิดเห็นเริ่มต้นจะอธิบายรายละเอียดวัตถุประสงค์ของโค้ด

/**
 * Converts US dollars to Swiss francs.
 *
 * @param {number} dollars The total number of dollars.
 * @return {number} swissFrancs The provided value in Swiss francs.
 * @customfunction
 */

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

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

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

  • @param: คุณใช้คำอธิบายประกอบ @param เพื่ออธิบายพารามิเตอร์แต่ละรายการที่ส่งไปยังฟังก์ชันได้
  • @return: คุณสามารถใช้คำอธิบายประกอบ @return เพื่ออธิบายสิ่งที่ฟังก์ชันส่งคืน
  • @customfunction: คุณควรเพิ่ม @customfunction ในความคิดเห็นของเอกสารสำหรับฟังก์ชันที่กำหนดเองเสมอ คำอธิบายประกอบนี้จะแจ้งให้ชีตเติมข้อความอัตโนมัติสำหรับฟังก์ชันที่กำหนดเองเช่นเดียวกับที่ชีตเติมข้อความอัตโนมัติสำหรับฟังก์ชันในตัวเมื่อคุณป้อนชื่อฟังก์ชันในเซลล์ดังที่เห็นด้านล่าง

d8680ab6efae97ac.gif

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

จากนั้น ให้โฟกัสที่โค้ดในฟังก์ชัน USDTOCHF()

function USDTOCHF(dollars){
  var swissFrancs = dollars * .99; 
  return swissFrancs;
}

ดังที่กล่าวไว้ก่อนหน้านี้ USDTOCHF() จะใช้ตัวแปรตัวเลข dollars คูณด้วยอัตราแลกเปลี่ยนคงที่ และแสดงผลค่าที่แปลงเป็นฟรังก์สวิสในตัวแปรตัวเลข swissFrancs พารามิเตอร์อินพุตคือค่าที่อยู่ในเซลล์ที่ระบุเมื่อเพิ่มฟังก์ชันที่กำหนดเองลงในเซลล์ ในตัวอย่างนี้ จำนวนเงินดอลลาร์ที่ป้อนมาจากคอลัมน์ H ค่าเอาต์พุต swissFrancs จะอยู่ในเซลล์ของฟังก์ชัน (คอลัมน์ I ในตัวอย่างนี้)

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

ต่อคำนำหน้าสตริง

สมมติว่าคุณต้องการให้เอาต์พุตตัวเลขของฟังก์ชัน USDTOCHF() มีคำนำหน้าฟรังก์สวิส CHF คุณทำได้ด้วย Apps Script โดยใช้ตัวดำเนินการเชื่อมข้อความ (+), ตามที่แสดงในวิธีการต่อไปนี้

  1. ในเครื่องมือแก้ไขสคริปต์ ให้อัปเดตคำอธิบายประกอบ @return เพื่อแสดงผลสตริงแทนตัวเลข
  2. เปลี่ยน return swissFrancs เป็น return 'CHF' + swissFrancs

โอเปอเรเตอร์ + จะต่อสตริง CHF ไว้ที่ด้านหน้าของค่าที่อยู่ใน swissFrancs ตอนนี้โค้ดควรมีลักษณะดังนี้

/**
 * Converts US dollars to Swiss francs.
 *
 * @param {number} dollars The total number of dollars.
 * @return {string} swissFrancs The provided value in Swiss francs.
 * @customfunction
 */
function USDTOCHF(dollars){
  var swissFrancs = dollars * .99;
  return 'CHF' + swissFrancs;
}
  1. หากต้องการบันทึกสคริปต์ ให้คลิกบันทึก เซฟ

ตอนนี้สตริงฟรังก์สวิสจะนำหน้าค่าของคอลัมน์ I ดังนี้

20e4bfb7f0a994ea.png

ตอนนี้ฟังก์ชันที่กำหนดเองไม่เพียงแปลงดอลลาร์สหรัฐเป็นฟรังก์สวิสเท่านั้น แต่ยังแสดงผลสกุลเงินที่มีคำนำหน้าสตริงด้วย

ขั้นสูง: ดึงข้อมูลภายนอก

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

คุณใช้โค้ดด้านล่างเพื่อดูอัตรา Conversion ปัจจุบันจากฟรังก์สวิสเป็นดอลลาร์สหรัฐได้

function USDTOCHF(dollars){
  // Gets a cache that is common to all users of the script.
  var cache = CacheService.getScriptCache();

  // Accesses the memory location (rates.CHF) of the script cache.
  var rate = cache.get('rates.CHF');

  // If a cache miss occurs, the program fetches the current
  // CHF rate from an API and stores the rate in the cache
  // for later convenience.
  if (!rate) {
    var response =
UrlFetchApp.fetch('https://api.exchangeratesapi.io/latest?base=USD');
    var result = JSON.parse(response.getContentText());
    rate = result.rates.CHF;
    cache.put('rates.CHF', rate);
  }
  // Converts dollars to CHF according to the latest rate.
  var swissFrancs = dollars * rate;
  // Returns the CHF value.
  return 'CHF' + swissFrancs;
}

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

หลักเกณฑ์สำหรับฟังก์ชันที่กำหนดเอง

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

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

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

6. บทสรุป

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

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

ใช่ ไม่

สิ่งที่เราได้พูดถึงไปแล้ว

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

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

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

ดู Codelab ถัดไปได้ที่สเปรดชีต ชีต และช่วง