วิธีใช้ Gemini เขียน Google Apps Script

Google Gemini สามารถช่วยเขียน Google Apps Script เพื่อทำงานอัตโนมัติกับ Google Sheets, Docs, Forms, Drive, Gmail, Calendar และบริการอื่นใน Google Workspace ได้ ตั้งแต่งานง่ายอย่างเพิ่มเมนูในชีต ส่งอีเมลอัตโนมัติ จัดการข้อมูล ไปจนถึงสร้าง Trigger, Custom Function และ Workflow ที่ทำงานตามเวลา

Google Apps Script ใช้ Modern JavaScript เป็นหลัก ทำให้คนที่มีพื้นฐาน JavaScript สามารถเริ่มต้นได้ไม่ยาก และ Google มี Code Editor บน Browser โดยตรง ไม่จำเป็นต้องติดตั้ง Runtime แยกเพื่อเริ่มเขียน Script

วิธีใช้ Gemini ให้มีประสิทธิภาพควรระบุให้ชัดว่า Script จะทำงานกับ Google App ใด ข้อมูลอยู่ตรงไหน ต้องการให้เกิดอะไร และ Script ควรถูกเรียกด้วยวิธีใด เช่น Run เอง, กดปุ่ม, onEdit() หรือ Time-driven Trigger จากนั้นจึงให้ Gemini สร้าง Code ทีละ Feature และทดสอบด้วยข้อมูลจริงที่ไม่สำคัญก่อนนำไปใช้กับระบบงานจริง

❶ ⚙️ Google Apps Script คืออะไร

Google Apps Script คือแพลตฟอร์มพัฒนา Application และ Automation ของ Google ที่ใช้ JavaScript และทำงานบน Server ของ Google

สามารถใช้เขียน Script เพื่อเชื่อมบริการ Google Workspace เช่น

  • Google Sheets
  • Google Docs
  • Google Forms
  • Google Drive
  • Gmail
  • Google Calendar
  • Google Slides

ตัวอย่างงานที่นิยมทำ ได้แก่

  • ส่ง Email จากข้อมูลใน Google Sheets
  • สร้างเอกสารอัตโนมัติ
  • สร้าง PDF จาก Template
  • ย้ายไฟล์ใน Drive
  • เพิ่มเมนูใน Google Sheets
  • สร้าง Custom Function
  • ประมวลผลข้อมูลจาก Form
  • ทำงานอัตโนมัติตามเวลา
  • เรียก REST API
  • สร้าง Web App
  • เชื่อมหลายบริการ Google เข้าด้วยกัน

ข้อดีสำคัญคือไม่จำเป็นต้องตั้ง Server เองสำหรับงาน Automation ขนาดเล็กจำนวนมาก

❷ 🤖 Gemini ช่วยเขียน Apps Script ได้อย่างไร

Gemini สามารถช่วยได้ตั้งแต่ก่อนเริ่มเขียน Code

เช่น

วาง Logic

อธิบาย Workflow และแบ่งขั้นตอนให้

สร้าง Code

เปลี่ยน Requirement เป็น Apps Script

อธิบาย Code

ช่วยอธิบาย Function และ Google Service ที่ใช้

Debug

ช่วยอ่าน Error Message และหา Root Cause

Refactor

ลด Code ซ้ำและแบ่ง Function

เพิ่ม Trigger

ช่วยออกแบบ onEdit(), onOpen() หรือ Time-driven Trigger

เขียน Custom Function

สร้าง Function สำหรับใช้ใน Google Sheets

เชื่อม API

ช่วยเขียน UrlFetchApp เพื่อเรียก External API

Review Security

ช่วยค้นหา API Key ที่ Hard-code หรือ Permission ที่กว้างเกินความจำเป็น

จึงสามารถใช้ Gemini เป็น Pair Programmer สำหรับ Apps Script ได้ค่อนข้างครบวงจร

❸ 🧠 Prompt ที่ดีที่สุดสำหรับเขียน Apps Script

ไม่ควรพิมพ์เพียง

“เขียน Apps Script ให้หน่อย”

ควรให้ Context เช่น

“ช่วยเขียน Google Apps Script สำหรับ Google Sheets

ข้อมูล:

  • Sheet ชื่อ Orders
  • Column A = Order ID
  • Column B = Customer
  • Column C = Email
  • Column D = Status

เป้าหมาย:
เมื่อ Status ใน Column D ถูกเปลี่ยนเป็น Completed ให้บันทึกเวลาปัจจุบันลง Column E

ข้อกำหนด:

  1. ใช้ onEdit(e)
  2. ทำงานเฉพาะ Sheet Orders
  3. ทำงานเฉพาะ Column D
  4. ห้ามทำงานกับ Header Row
  5. ถ้า Status ไม่ใช่ Completed ไม่ต้องทำอะไร
  6. อธิบาย Code
  7. ระบุวิธี Test
  8. ระบุข้อจำกัดของ Trigger
  9. อย่าเพิ่ม Feature นอก Requirement”

Prompt แบบนี้ทำให้ Gemini มีข้อมูลมากพอที่จะสร้าง Script ได้ตรงกว่า

❹ 📊 วิธีเริ่ม Google Apps Script จาก Google Sheets

หากต้องการเขียน Script สำหรับ Spreadsheet สามารถเปิด Google Sheets ที่ต้องการ แล้วเข้าสู่ Apps Script Editor ตามเมนูที่ Google Sheets มีให้

จากนั้นจะเห็น Project สำหรับเขียน Script

ตัวอย่าง Code พื้นฐาน

function helloWorld() {
  Logger.log("Hello World");
}

กด Run เพื่อทดสอบ Function

ในการ Run ครั้งแรก Function ที่ใช้บริการซึ่งต้องมีสิทธิ์อาจขอให้ผู้ใช้ Authorize ตาม Scope ที่ Script ต้องการ

❺ 🧩 วิธีให้ Gemini เขียน Function แรก

สมมติต้องการเขียนคำว่า Hello ลง A1

Prompt

“เขียน Apps Script สำหรับ Google Sheets ให้ใส่ข้อความ Hello ลง Cell A1 ของ Active Sheet”

ตัวอย่าง Code

function writeHello() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  sheet.getRange("A1").setValue("Hello");
}

สามารถถาม Gemini ต่อว่า

“อธิบาย SpreadsheetApp, getActiveSpreadsheet(), getActiveSheet(), getRange() และ setValue() ทีละส่วน”

วิธีนี้เหมาะกับมือใหม่มากกว่าการ Copy Code โดยไม่รู้ว่าแต่ละ Method ทำอะไร

❻ 📋 วิธีอ่านข้อมูลจาก Google Sheets

สมมติต้องการอ่าน A2:C10

function readData() {
  const sheet = SpreadsheetApp
    .getActiveSpreadsheet()
    .getActiveSheet();

  const values = sheet
    .getRange("A2:C10")
    .getValues();

  Logger.log(values);
}

getValues() จะคืนข้อมูลเป็น Array แบบสองมิติ

สามารถถาม Gemini

“อธิบายโครงสร้าง Array ที่ได้จาก getValues() และแสดงตัวอย่างว่า Row กับ Column ถูกเก็บอย่างไร”

การเข้าใจ Array มีความสำคัญมากเมื่อเริ่มทำ Automation กับข้อมูลหลาย Row

❼ ✍️ วิธีเขียนข้อมูลหลาย Row

หากต้องเขียนข้อมูลหลาย Cell ไม่ควรเรียก setValue() ทีละ Cell โดยไม่จำเป็น

สามารถเตรียมข้อมูลเป็น Array แล้วใช้ setValues()

ตัวอย่าง

function writeProducts() {
  const sheet = SpreadsheetApp
    .getActiveSpreadsheet()
    .getActiveSheet();

  const products = [
    ["Router", 1500],
    ["Switch", 2500],
    ["Access Point", 3200],
  ];

  sheet
    .getRange(2, 1, products.length, 2)
    .setValues(products);
}

Prompt ที่ควรใช้

“เขียน Apps Script สำหรับเขียนข้อมูล Array 2 มิติลง Google Sheets ในครั้งเดียว และหลีกเลี่ยงการเขียน Cell ทีละ Row ถ้าไม่จำเป็น”

ช่วยให้ Code มีประสิทธิภาพกว่า

❽ 🚀 ลดการเรียก Spreadsheet Service ซ้ำ

Apps Script ที่วน Loop แล้วอ่านหรือเขียน Cell ทีละรายการสามารถทำงานช้าได้

ตัวอย่างแนวคิดที่ไม่เหมาะกับข้อมูลจำนวนมาก

for (let row = 2; row <= 1000; row++) {
  const value = sheet.getRange(row, 1).getValue();
  Logger.log(value);
}

วิธีที่เหมาะกว่าในหลายกรณีคืออ่านช่วงข้อมูลครั้งเดียว

const values = sheet
  .getRange(2, 1, 999, 1)
  .getValues();

แล้วประมวลผล Array ใน Memory

Prompt

“Refactor Apps Script นี้เพื่อลดการเรียก Spreadsheet Service ใน Loop โดยใช้ Batch Read/Write ถ้าเป็นไปได้”

นี่เป็นหนึ่งในแนวทางที่มีประโยชน์มากเมื่อใช้ Gemini Optimize Apps Script

❾ 🧮 วิธีสร้าง Custom Function ด้วย Gemini

Apps Script สามารถสร้าง Function สำหรับใช้ใน Google Sheets คล้าย Formula ได้

ตัวอย่าง

function SALE_PRICE(price, discountPercent) {
  return price * (1 - discountPercent / 100);
}

จากนั้นใช้ใน Sheet

=SALE_PRICE(A2,B2)

Prompt

“สร้าง Google Sheets Custom Function ชื่อ SALE_PRICE รับราคาและเปอร์เซ็นต์ส่วนลด แล้วคืนราคาหลังหักส่วนลด พร้อมตรวจ Input”

ข้อควรระวังคือ Custom Function มีข้อจำกัดของ Apps Script และไม่เหมาะกับทุกงาน Automation

❿ 📂 วิธีให้ Gemini ทำงานเฉพาะ Sheet ที่กำหนด

ไม่ควรอาศัย Active Sheet เสมอไป หาก Script ต้องทำงานกับ Sheet เฉพาะเจาะจง

ตัวอย่าง

function getOrdersSheet() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName("Orders");

  if (!sheet) {
    throw new Error('Sheet "Orders" not found');
  }

  return sheet;
}

Prompt

“เขียน Apps Script ให้ใช้ Sheet ชื่อ Orders เท่านั้น และถ้าไม่มี Sheet นี้ให้ Throw Error ที่เข้าใจง่าย”

วิธีนี้ลดความเสี่ยง Script เขียนข้อมูลผิด Sheet

🔄 วิธีใช้ Gemini เขียน onEdit(e)

onEdit(e) เป็น Simple Trigger สำหรับ Google Sheets ที่ทำงานเมื่อผู้ใช้แก้ไขค่าใน Spreadsheet ตามเงื่อนไขของ Trigger

ตัวอย่าง

function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();

  if (sheet.getName() !== "Orders") {
    return;
  }

  if (range.getColumn() !== 4 || range.getRow() < 2) {
    return;
  }

  if (range.getValue() !== "Completed") {
    return;
  }

  sheet
    .getRange(range.getRow(), 5)
    .setValue(new Date());
}

Code นี้ตรวจ

  • Sheet
  • Column
  • Header
  • ค่า Status

ก่อนทำงาน

ดีกว่า Trigger ที่ทำงานทุกครั้งโดยไม่ Filter Event

⚠️ Simple Trigger มีข้อจำกัด

Google ระบุว่า Simple Trigger เช่น

onOpen(e)
onEdit(e)

มีข้อจำกัดบางอย่าง โดยเฉพาะการเรียก Service ที่ต้อง Authorization

และ Simple Trigger มีข้อจำกัดด้านเวลาการทำงาน

ดังนั้นอย่าถือว่า onEdit() เหมาะกับทุก Automation

หากต้องใช้บริการที่ต้อง Permission เพิ่ม อาจต้องใช้ Installable Trigger แทน

⏰ Installable Trigger คืออะไร

Installable Trigger มีความสามารถมากกว่า Simple Trigger และสามารถเรียก Service ที่ต้อง Authorization ได้ตามเงื่อนไขของระบบ

ตัวอย่าง Trigger ได้แก่

  • Open
  • Edit
  • Change
  • Form Submit
  • Calendar Event
  • Time-driven

Prompt

“งานนี้ต้องส่ง Gmail หลังมี Form Submit ช่วยอธิบายก่อนว่าควรใช้ Simple Trigger หรือ Installable Trigger แล้วจึงสร้าง Code”

การให้ Gemini เลือก Trigger จาก Requirement ช่วยลดปัญหา Script เขียนถูกแต่ Trigger ไม่มี Permission เพียงพอ

🕘 วิธีสร้าง Time-driven Trigger

Apps Script สามารถทำงานอัตโนมัติตามเวลา

ตัวอย่าง Use Case

  • ส่ง Report ทุกเช้า
  • Backup ทุกคืน
  • ตรวจข้อมูลทุกชั่วโมง
  • สรุปยอดขายทุกวัน
  • ล้างข้อมูลชั่วคราวทุกสัปดาห์

Trigger สามารถตั้งผ่าน Apps Script Editor ได้

Google ระบุขั้นตอนโดยทั่วไปว่า

  1. เปิด Apps Script Project
  2. เลือก Triggers
  3. Add Trigger
  4. เลือก Function
  5. เลือก Event Source
  6. กำหนดเวลา
  7. Save

Prompt

“ฉันต้องการให้ Function createDailyReport ทำงานทุกวัน ช่วยอธิบายวิธีตั้ง Time-driven Trigger และข้อจำกัดที่ควรรู้”

📩 วิธีใช้ Gemini เขียน Script ส่ง Email

Apps Script สามารถทำงานกับ Gmail ได้ตาม Service และ Permission ที่เกี่ยวข้อง

ตัวอย่างแนวคิด

function sendNotification() {
  GmailApp.sendEmail(
    "example@example.com",
    "Order completed",
    "Your order has been completed."
  );
}

แต่สำหรับระบบจริงไม่ควร Hard-code Recipient หาก Email มาจาก Spreadsheet

สามารถอ่าน Email จากข้อมูลแทน

สิ่งสำคัญคือการส่ง Email มี Quota และ Authorization ที่ต้องคำนึงถึง

จึงไม่ควรสร้าง Loop ส่ง Email จำนวนมากโดยไม่ตรวจข้อจำกัดของ Apps Script และบัญชีที่ใช้

📧 ส่ง Email จาก Google Sheets อย่างไร

สมมติ

A = Name
B = Email
C = Status

Prompt

“เขียน Apps Script อ่านข้อมูลจาก Sheet Customers แล้วส่ง Email เฉพาะ Row ที่ Status เป็น Pending

ข้อกำหนด:

  • ห้ามส่งถ้า Email ว่าง
  • ตรวจ Email ก่อน
  • หลังส่งสำเร็จเปลี่ยน Status เป็น Sent
  • ถ้าส่งไม่สำเร็จให้บันทึก Error
  • ห้ามส่งซ้ำ Row ที่เป็น Sent”

Requirement เรื่อง ห้ามส่งซ้ำ สำคัญมาก

เพราะ Automation Email ที่ไม่มี State Management สามารถส่งซ้ำหลายครั้งได้

📝 วิธีใช้ Gemini กับ Google Forms

Apps Script สามารถทำงานร่วมกับ Google Forms และ Form Submission ได้

Use Case เช่น

Google Form
↓
ผู้ใช้ Submit
↓
Apps Script Trigger
↓
อ่าน Response
↓
สร้างเอกสาร
↓
ส่ง Email

Prompt

“ออกแบบ Apps Script Workflow หลัง Google Form Submit

ยังไม่ต้องเขียน Code ให้ระบุ Trigger, Input, Output, Permission และ Error Case ก่อน”

เมื่อ Architecture ชัดแล้วค่อยสร้าง Function

📄 วิธีใช้ Gemini สร้าง Google Docs อัตโนมัติ

Google Apps Script สามารถสร้างและแก้ Google Docs ได้

Use Case เช่น

  • Certificate
  • Invoice
  • Report
  • Contract Draft
  • Confirmation Letter

Workflow

Google Sheets
↓
Apps Script
↓
Template
↓
Google Docs
↓
PDF

สามารถสั่ง Gemini

“สร้าง Apps Script อ่าน Name และ Order ID จาก Google Sheets แล้วสร้าง Google Docs จาก Template โดยแทน Placeholder”

เช่น Template

Customer: {{CUSTOMER}}
Order: {{ORDER_ID}}

จากนั้น Script ใช้ Replace Text ตาม Logic ที่กำหนด

📁 วิธีใช้ Gemini จัดการ Google Drive

Apps Script สามารถช่วยจัดการ File และ Folder ใน Drive ได้

ตัวอย่างงาน

  • สร้าง Folder
  • ค้นหา File
  • Move File
  • Rename
  • สร้างเอกสาร
  • จัดเก็บ Report

Prompt

“เขียน Apps Script สร้าง Folder สำหรับแต่ละ Customer แต่ห้ามสร้างซ้ำถ้ามี Folder ชื่อนั้นอยู่แล้ว”

ควรคิดเรื่อง Duplicate และ Permission ก่อนทุกครั้ง

📅 วิธีใช้ Gemini กับ Google Calendar

Apps Script สามารถเชื่อม Google Calendar ได้

Use Case เช่น

  • สร้าง Event จาก Sheets
  • สร้าง Reminder Workflow
  • อ่าน Event เพื่อทำ Report
  • Sync ข้อมูล

Prompt

“เขียน Apps Script อ่าน Meeting จาก Sheet แล้วสร้าง Calendar Event โดยใช้ Date, Start Time, End Time และ Title จากแต่ละ Row

ก่อนเขียน Event ให้ตรวจว่ามี Event เดิมหรือไม่เพื่อป้องกัน Duplicate”

Calendar Automation ควรออกแบบ Idempotency ให้ดี ไม่เช่นนั้นการ Run Script ซ้ำอาจสร้าง Event ซ้ำ

🔁 Idempotency คืออะไร

Automation ที่ดีควรคิดว่า

ถ้า Script ถูก Run ซ้ำ จะเกิดอะไรขึ้น

ตัวอย่าง Script ส่ง Email

ถ้ารัน 2 ครั้ง

ผู้ใช้ได้รับ Email 2 ฉบับหรือไม่

Script สร้าง Calendar

รัน 2 ครั้ง

Event ซ้ำหรือไม่

Script สร้าง Invoice

รัน 2 ครั้ง

Invoice ซ้ำหรือไม่

Prompt ที่ควรเพิ่มคือ

“ออกแบบ Script ให้ Run ซ้ำได้โดยไม่สร้างข้อมูลซ้ำ”

นี่เป็น Requirement สำคัญที่ผู้ใช้มักลืมบอก AI

🗃️ วิธีจัดการข้อมูลจำนวนมาก

หาก Sheet มีข้อมูลหลายหมื่น Row ไม่ควรเขียน Script แบบ

อ่าน 1 Cell
เขียน 1 Cell
อ่านอีก 1 Cell
เขียนอีก 1 Cell

หลายพันครั้งถ้าไม่จำเป็น

ควรพิจารณา

อ่าน Range
↓
Process Array
↓
เขียนผลกลับเป็น Batch

Prompt

“Optimize Apps Script นี้โดยลดจำนวน Calls ไปยัง Spreadsheet Service และใช้ Batch Operation”

นอกจากนี้ Apps Script มี Quotas และข้อจำกัดการทำงาน จึงควรออกแบบ Script ขนาดใหญ่โดยคำนึงถึงปริมาณงานด้วย

🧮 Quota ของ Google Apps Script สำคัญไหม

สำคัญ

Google Apps Script มี Quotas สำหรับบางบริการและการทำงานต่าง ๆ ซึ่งสามารถเปลี่ยนแปลงได้ตามนโยบายและประเภทบัญชี

หากระบบต้อง

  • ส่ง Email จำนวนมาก
  • เรียก External API จำนวนมาก
  • สร้างเอกสารจำนวนมาก
  • Run บ่อยมาก
  • ประมวลผลนาน
  • ใช้ Trigger จำนวนมาก

ควรตรวจ Quota ปัจจุบันก่อนออกแบบ Production Workflow

อย่าให้ Geminiสมมติว่า Apps Script สามารถ Run งานจำนวนไม่จำกัด

🌐 วิธีใช้ Gemini เขียน UrlFetchApp

Apps Script สามารถเรียก External HTTP API ผ่าน UrlFetchApp

ตัวอย่าง

function fetchData() {
  const response = UrlFetchApp.fetch(
    "https://api.example.com/data"
  );

  const data = JSON.parse(
    response.getContentText()
  );

  Logger.log(data);
}

สำหรับระบบจริงควรเพิ่ม

  • HTTP Method
  • Header
  • Timeout/Failure Strategy
  • Status Handling
  • Retry ตามความเหมาะสม
  • Authentication
  • Rate Limit

Prompt

“เขียน Apps Script เรียก REST API และตรวจ HTTP Status ก่อน Parse JSON พร้อม Error Handling”

🔑 อย่า Hard-code API Key

ตัวอย่างที่ไม่ควรทำ

const API_KEY = "REAL_SECRET_KEY";

โดยเฉพาะ Project ที่แชร์กับคนอื่น

ควรออกแบบ Secret Management ตามระดับความสำคัญของ Credential และ Environment

สำหรับข้อมูล Configuration บางประเภท Apps Script มี PropertiesService ให้ใช้เก็บ Key-Value ตาม Scope ที่เหมาะสม

ตัวอย่าง

function getApiKey() {
  const apiKey = PropertiesService
    .getScriptProperties()
    .getProperty("API_KEY");

  if (!apiKey) {
    throw new Error("API_KEY is not configured");
  }

  return apiKey;
}

อย่างไรก็ตาม หาก Credential มีความสำคัญสูง ควรพิจารณาระบบ Secret Management และสิทธิ์การเข้าถึง Project อย่างเหมาะสม ไม่ควรถือว่าการย้าย String ออกจาก Source Code เพียงอย่างเดียวแก้ Security ครบทุกกรณี

🔐 ระวัง Permission และ OAuth Scope

Apps Script ที่ใช้

  • Gmail
  • Drive
  • Calendar
  • Docs

อาจต้อง Authorization ตามบริการ

ก่อนให้ผู้ใช้จำนวนมาก Authorize Script ควรตรวจว่า Script ขอ Scope เท่าที่จำเป็นหรือไม่

Prompt

“Review Apps Script นี้และระบุ Google Services ที่ใช้ รวมถึง Permission ที่อาจต้องขอ โดยหลีกเลี่ยง Scope ที่ไม่จำเป็น”

หลัก Least Privilege ควรถูกนำมาใช้กับ Automation เช่นเดียวกับ Application ประเภทอื่น

🔄 Trigger ทำงานภายใต้บัญชีใคร

เรื่องนี้สำคัญโดยเฉพาะ Installable Trigger

Google ระบุว่า Installable Trigger จะทำงานภายใต้ Authorization ของผู้ที่สร้าง Trigger

ตัวอย่าง

Admin A สร้าง Trigger

User B เปิด Spreadsheet

Trigger ยังสามารถทำงานภายใต้ Account ของผู้สร้าง Trigger ตามเงื่อนไขของ Apps Script

ดังนั้นก่อน Deploy Workflow ในองค์กรควรเข้าใจ Ownership และ Authorization ให้ชัด

🧠 Event Object e คืออะไร

เมื่อ Trigger ทำงาน Apps Script สามารถส่ง Event Object เข้า Function

เช่น

function onEdit(e) {
  Logger.log(e.range.getA1Notation());
}

e อาจมี Context เช่น

  • Range ที่แก้
  • Value
  • Source
  • Event Type

ขึ้นอยู่กับ Trigger

อย่าเขียน

function onEdit() {

แล้วค่อย Query ข้อมูลทุกอย่างใหม่ถ้า Event Object มีข้อมูลที่ต้องการอยู่แล้ว

Prompt

“ใช้ข้อมูลจาก Event Object ให้มากที่สุด เพื่อลดการอ่าน Spreadsheet ซ้ำโดยไม่จำเป็น”

⚠️ อย่ากด Run onEdit(e) ตรง ๆ แล้วสรุปว่า Code พัง

มือใหม่มักกด Run

onEdit

จาก Apps Script Editor

แต่เมื่อ Run ด้วยมือ Function จะไม่ได้รับ Event Object แบบเดียวกับเหตุการณ์ Edit จริง

ทำให้ Code เช่น

e.range

เกิด Error เพราะ e ไม่มีค่า

วิธี Test ที่เหมาะคือแก้ Cell ใน Spreadsheet จริง หรือสร้าง Test Function พร้อม Event Mock อย่างระมัดระวังตามงาน

หากเกิด Error ให้ Gemini ตรวจว่า Function ต้องการ Event Object หรือไม่ก่อนแก้ Logic

▶️ วิธี Debug Apps Script ด้วย Gemini

หาก Script Error ควรส่ง

  • Error Message
  • Stack Trace
  • Function
  • Line Number
  • Trigger Type
  • Input
  • Expected Result
  • Actual Result

Prompt

“Apps Script นี้เกิด Error

Error:
[ข้อความ]

Trigger:
onEdit(e)

Expected:
[สิ่งที่ควรเกิด]

Actual:
[สิ่งที่เกิด]

อย่า Rewrite Script ก่อน ให้หา Root Cause และอธิบายว่า Error เกี่ยวข้องกับ Trigger, Authorization, Data หรือ Logic”

วิธีนี้ช่วยลดการแก้ Code แบบเดา

🐛 Error ยอดนิยมของ Apps Script

ปัญหาที่พบบ่อย เช่น

Cannot read properties of undefined

อาจเกิดจาก Object ไม่มีค่า หรือ Run Trigger Function แบบ Manual

Authorization Error

Script ยังไม่ได้รับ Permission ที่จำเป็น

Service invoked too many times

อาจเกี่ยวข้องกับการเรียก Service หรือ Quota

Exceeded maximum execution time

Script ทำงานนานเกินข้อจำกัดที่เกี่ยวข้อง

Range Error

Row หรือ Column ไม่ถูกต้อง

Sheet Not Found

ชื่อ Sheet ไม่ตรง

JSON Parse Error

API ตอบข้อมูลที่ไม่ใช่ JSON ตามที่คาด

Gemini ช่วยวิเคราะห์ได้ แต่ควรส่ง Error เต็ม ๆ

🧪 วิธีสร้าง Test Function

สมมติมี Business Logic

function calculateDiscount(price, percent) {
  return price * (1 - percent / 100);
}

สามารถสร้าง Test ง่าย ๆ

function testCalculateDiscount() {
  const result = calculateDiscount(1000, 20);

  if (result !== 800) {
    throw new Error(
      `Expected 800 but got ${result}`
    );
  }

  Logger.log("Test passed");
}

Prompt

“แยก Business Logic ออกจาก Spreadsheet Service เพื่อให้ Function สามารถ Test ได้ง่าย”

นี่เป็น Design ที่ดีมากสำหรับ Apps Script ที่เริ่มใหญ่ขึ้น

🧱 แยก Logic ออกจาก Google Service

ตัวอย่างที่ไม่ควรให้ทุก Logic อยู่ใน Function เดียว

อ่าน Sheet
คำนวณ
ส่ง Email
แก้ Sheet
สร้าง Drive File

ทั้งหมดรวมกัน

ควรแยกเป็น

readOrders()
calculateTotals()
sendEmail()
updateStatus()
createReport()

Prompt

“Refactor Apps Script นี้โดยแยก Business Logic, Spreadsheet Access และ Email Sending เป็น Function คนละ Responsibility”

ทำให้ Debug และ Test ง่ายขึ้น

♻️ วิธีใช้ Gemini Refactor Apps Script

Prompt ที่เหมาะคือ

“Review Apps Script นี้ด้าน:

  1. Service Calls
  2. Duplicate Code
  3. Long Function
  4. Error Handling
  5. Naming
  6. Trigger Logic
  7. Authorization
  8. Quota Risk
  9. Security
  10. Testability

ยังไม่ Rewrite Code ให้จัดอันดับปัญหาก่อน”

จากนั้นเลือกแก้ทีละจุด

ไม่ควรให้ Gemini Rewrite Automation ที่ใช้งานจริงทั้ง Project ในครั้งเดียว

🗂️ ใช้ LockService เมื่อไร

Automation บางงานอาจถูก Run พร้อมกัน เช่น

  • Form Submit หลายรายการ
  • Trigger ซ้อน
  • User หลายคนแก้ Sheet

อาจเกิด Race Condition

Apps Script มี Service สำหรับ Lock ตาม Use Case ที่เหมาะสม

Prompt

“Script นี้สามารถถูกเรียกพร้อมกันหลาย Execution ช่วยตรวจว่ามี Race Condition หรือไม่ และต้องใช้ LockService หรือควรแก้ Design แบบอื่น”

ไม่จำเป็นต้องใช้ Lock ทุก Script แต่ควรคิดเรื่อง Concurrent Execution เมื่อมีข้อมูล Shared

💾 PropertiesService ใช้ทำอะไรได้บ้าง

สามารถเก็บ Configuration หรือ State ขนาดเล็กในรูป Key-Value

เช่น

  • Last processed row
  • Configuration
  • Small state
  • Token/credential บางกรณีตาม Security Model

ตัวอย่าง

function saveLastRow(row) {
  PropertiesService
    .getScriptProperties()
    .setProperty("LAST_ROW", String(row));
}

อ่าน

function getLastRow() {
  return PropertiesService
    .getScriptProperties()
    .getProperty("LAST_ROW");
}

ไม่ควรใช้ Spreadsheet Cell เป็นที่เก็บ Internal State ทุกอย่างหากไม่จำเป็น

🗃️ CacheService ใช้เมื่อไร

ถ้า Script เรียกข้อมูลซ้ำบ่อย สามารถพิจารณา Cache ตาม Use Case

ตัวอย่าง

  • API Response ที่ไม่เปลี่ยนบ่อย
  • Lookup Data
  • Configuration

Prompt

“ข้อมูลนี้ถูกเรียกทุกครั้งแต่เปลี่ยนวันละครั้ง ช่วยตรวจว่าควรใช้ CacheService หรือไม่ และอธิบาย Cache Invalidation”

การเพิ่ม Cache โดยไม่มี Strategy อาจทำให้ข้อมูลเก่า ดังนั้นต้องกำหนด Expiration และ Source of Truth ให้ชัด

📜 Logging สำคัญอย่างไร

Automation ที่ทำงานเองตาม Trigger ต้องมี Log ที่ช่วยตรวจปัญหา

ควรบันทึกข้อมูลที่มีประโยชน์ เช่น

Execution start
Rows processed: 120
Emails sent: 15
Rows skipped: 105
Errors: 2

แต่ไม่ควร Log

  • Password
  • API Key
  • Access Token
  • Sensitive Personal Data

Prompt

“เพิ่ม Logging สำหรับ Debug แต่ห้าม Log Credential หรือข้อมูล Sensitive”

🔁 ป้องกัน Email ส่งซ้ำ

ตัวอย่าง Workflow

Row 10
Status = Pending
↓
Send Email
↓
Status = Sent

แต่ถ้า Script ส่ง Email สำเร็จ แล้ว Error ก่อนเปลี่ยน Status เป็น Sent

Run ครั้งต่อไปอาจส่งซ้ำ

จึงควรคิดเรื่อง Transaction-like Workflow หรือ Unique Identifier ตาม Use Case

Prompt

“ตรวจ Automation นี้ว่ามีสถานการณ์ใดทำให้ Email ส่งซ้ำได้ และเสนอ Design ที่ลด Duplicate โดยไม่ซ่อน Error”

นี่เป็นระดับการใช้ Gemini ที่มีประโยชน์กว่าการขอเพียง Code

📅 ป้องกัน Calendar Event ซ้ำ

ใช้แนวคิดคล้ายกัน

อาจเก็บ

eventId

กลับลง Sheet หลังสร้าง Event

ก่อนสร้างใหม่ให้ตรวจ State

อย่าใช้เพียง Event Title เป็น Unique Key หาก Title สามารถซ้ำได้

ควรออกแบบ Identifier ตามข้อมูลจริง

📄 ป้องกันสร้าง Document ซ้ำ

ถ้าสร้าง Invoice จากแต่ละ Row อาจเก็บ

documentId
fileUrl
generatedAt

หลังสร้าง

จากนั้น Script ตรวจว่ามี Document ID แล้วหรือไม่ก่อนสร้างใหม่

ทำให้ Run Script ซ้ำได้ปลอดภัยขึ้น

🕸️ วิธีใช้ Gemini สร้าง Web App ด้วย Apps Script

Apps Script สามารถ Publish Web App ได้

Function สำคัญ เช่น

function doGet(e) {
  return ContentService
    .createTextOutput("Hello");
}

หรือใช้ HTML Service สำหรับ UI

Simple Trigger Guide ของ Google ระบุว่า doGet(e) ทำงานเมื่อมี HTTP GET Request ไปยัง Web App และ doPost(e) ทำงานเมื่อได้รับ HTTP POST

Prompt

“สร้าง Apps Script Web App Version แรกที่ตอบ JSON ด้วย doGet(e) และยังไม่เพิ่ม Authentication จนกว่าจะอธิบาย Security Model ก่อน”

สำหรับ Web App จริงต้องคิด

  • Who has access
  • Execute as
  • Authentication
  • Input Validation
  • Output
  • CORS/Integration ตาม Use Case
  • Secret
  • Logging

ก่อน Deploy

🌐 วิธีสร้าง JSON Response

ตัวอย่าง

function doGet() {
  const data = {
    status: "ok",
    message: "Hello",
  };

  return ContentService
    .createTextOutput(JSON.stringify(data))
    .setMimeType(ContentService.MimeType.JSON);
}

จากนั้นสามารถใช้ Apps Script เป็น Endpoint สำหรับ Use Case เบื้องต้นได้

แต่ไม่ควรถือว่าเป็น Architecture ที่เหมาะกับ API ขนาดใหญ่ทุกระบบ

🤖 Gemini API กับ Apps Script ใช้ร่วมกันได้ไหม

ได้ในเชิง Architecture เพราะ Apps Script สามารถเรียก External REST API ด้วย HTTP Request

จึงสามารถออกแบบ

Google Sheets
↓
Apps Script
↓
Gemini API
↓
AI Response
↓
Google Sheets

ตัวอย่าง Use Case

  • สรุปข้อความใน Sheet
  • จัดหมวดหมู่ข้อมูล
  • สร้าง Draft
  • วิเคราะห์ Feedback
  • Extract Structured Data

อย่างไรก็ตาม การใช้ Gemini API มีเรื่อง

  • API Key
  • Model
  • Rate Limit
  • Quota
  • Cost
  • Error Handling
  • Retry
  • Structured Output

ที่ต้องพิจารณาแยกต่างหาก

🔐 อย่าใส่ Gemini API Key ใน Cell

ไม่ควรเก็บ Secret แบบ

Sheet1!A1 = REAL_API_KEY

เพราะคนที่เห็น Spreadsheet อาจเข้าถึง Key ได้

และไม่ควร Hard-code Key ลง Source Code ที่แชร์

ควรใช้ Secret Handling ตาม Security Model ของ Project

หัวข้อการเขียน Apps Script กับ Gemini API ควรตรวจ Documentation API ปัจจุบันทุกครั้ง เพราะ Endpoint, Model และ Parameter สามารถเปลี่ยนได้

🧩 Gemini Canvas ช่วยเขียน Apps Script ได้อย่างไร

Gemini Canvas รองรับการสร้างและแก้ Code

สามารถใช้ Prompt เช่น

“สร้าง Google Apps Script สำหรับ Sheets ที่อ่าน Order แล้วสร้าง Daily Report”

จากนั้นแก้ต่อเป็นรอบ

“แยก Function อ่านข้อมูลออกจาก Function คำนวณ”

“เพิ่ม Error Handling”

“ตรวจ Trigger”

“ลด Service Calls”

“เพิ่ม Logging”

Canvas เหมาะกับการ Draft และ Review Code แต่ Apps Script จริงควรนำไป Run และทดสอบใน Apps Script Environment เพราะ Canvas ไม่ได้แทน Permission, Trigger และ Runtime จริงของ Google Apps Script

⚠️ อย่าคิดว่า JavaScript ทุก Code ใช้ใน Apps Script ได้ทันที

แม้ Apps Script ใช้ Modern JavaScript แต่ Environment ไม่ใช่ Browser JavaScript หรือ Node.js แบบเดียวกันทุกอย่าง

ตัวอย่าง Browser API บางชนิดอาจไม่มีใน Server-side Apps Script Environment

ในทางกลับกัน Apps Script มี Service เฉพาะ เช่น

SpreadsheetApp
DriveApp
GmailApp
CalendarApp
DocumentApp
FormApp
UrlFetchApp

ดังนั้น Prompt ควรระบุ

“นี่คือ Google Apps Script ไม่ใช่ Browser JavaScript และไม่ใช่ Node.js”

ช่วยลดโอกาสได้ Code ที่ใช้ API ผิด Environment

📦 Apps Script ใช้ npm Package ได้เหมือน Node.js ไหม

ไม่ควรสมมติว่า Apps Script ทำงานเหมือน Node.js Project ปกติ

หาก Gemini สร้าง Code เช่น

const package = require("some-package");

ให้หยุดตรวจทันทีว่า Environment และ Build Workflow รองรับหรือไม่

สำหรับ Apps Script Editor โดยตรงควรใช้ API และ Library ที่รองรับใน Environment ของ Apps Script

ถ้าใช้ Toolchain ภายนอกจะเป็นอีก Workflow หนึ่ง

🔍 วิธีตรวจ Hallucination ของ Gemini

AI สามารถสร้าง Method ที่ดูเหมือนจริงแต่ไม่มีใน Apps Script

ตัวอย่าง Gemini อาจเสนอ

SpreadsheetApp.sendEmail()

ทั้งที่การส่ง Email ควรใช้ Service ที่เกี่ยวข้อง ไม่ใช่เดาจากชื่อ

Prompt ที่มีประโยชน์คือ

“ตรวจ Method ทุกตัวใน Code ว่าเป็น Apps Script API จริง หากไม่แน่ใจให้ระบุว่าต้องตรวจ Documentation แทนการสร้าง Method เอง”

ก่อนใช้ Production ควรเทียบกับ Documentation ของ Google

🧪 ทดสอบกับ Copy ของ Sheet ก่อน

ถ้า Script ทำงานกับ

  • ลบ Row
  • เปลี่ยนข้อมูล
  • ส่ง Email
  • สร้าง File
  • ย้าย File

ควรสร้าง Test Spreadsheet หรือ Copy ก่อน

Workflow

Production Sheet
↓
Create Test Copy
↓
Run Script
↓
Check Result
↓
Fix
↓
Run Again
↓
Deploy to Production

อย่าใช้ข้อมูลจริงเป็นสนามทดลอง Version แรก

🔥 Script ลบข้อมูลต้องมี Dry Run

ถ้าต้องลบ Row ตามเงื่อนไข

อย่าเริ่มจาก Delete

ให้ Gemini สร้าง

Phase 1

แสดง Row ที่จะถูกลบ

Phase 2

นับจำนวน

Phase 3

ให้ตรวจ

Phase 4

ค่อยเปิด Delete Mode

Prompt

“สร้าง Dry Run Mode สำหรับ Script นี้ โดยแสดงรายการ Row ที่จะถูกลบแต่ยังไม่ลบจริง”

เหมาะกับ Automation ที่มีความเสี่ยง

🔐 Apps Script จาก Gemini ปลอดภัย 100% หรือไม่

ไม่ควรถือว่าปลอดภัย 100%

AI อาจสร้าง Script ที่

  • ขอ Permission กว้าง
  • ลบข้อมูลผิด
  • ส่ง Email ซ้ำ
  • สร้าง Event ซ้ำ
  • Hard-code Secret
  • Log Sensitive Data
  • Loop ไม่มีขอบเขต
  • ใช้ Trigger ผิด
  • ใช้ Method ไม่มีจริง
  • ชน Quota
  • ทำงานช้า
  • Handle Error ผิด

ทุก Script ควรถูก Review ก่อน Authorize โดยเฉพาะ Script ที่เข้าถึง Gmail, Drive หรือข้อมูลธุรกิจสำคัญ

🚫 10 ข้อผิดพลาดเมื่อใช้ Gemini เขียน Apps Script

❶ ไม่บอกว่าเป็น Apps Script

AI อาจสร้าง Node.js หรือ Browser JavaScript

❷ ไม่บอกชื่อ Sheet

Gemini ต้องเดา

❸ ใช้ Active Sheet ทุกอย่าง

เสี่ยงแก้ผิด Sheet

❹ อ่าน/เขียนทีละ Cell หลายพันครั้ง

Performance อาจไม่ดี

❺ ใช้ onEdit กับงานที่ต้อง Authorization โดยไม่ตรวจ

Trigger อาจทำงานไม่ได้ตามที่คาด

❻ กด Run onEdit ตรง ๆ

ไม่มี Event Object จริง

❼ ไม่ป้องกัน Duplicate

Email, Event หรือ Document ถูกสร้างซ้ำ

❽ Hard-code API Key

เสี่ยง Secret รั่ว

❾ ไม่ตรวจ Quota

Automation อาจหยุดเมื่อใช้งานจริง

❿ ทดสอบบน Production ก่อน

เสี่ยงข้อมูลเสีย

🪜 Workflow ใช้ Gemini เขียน Google Apps Script

แนวทางที่แนะนำคือ

❶ กำหนด Google App

Sheets, Docs, Gmail หรือ Calendar

❷ กำหนด Requirement

Script ต้องทำอะไร

❸ ระบุข้อมูล

Sheet, Column, Range และ Header

❹ เลือก Trigger

Manual, onEdit, Form Submit หรือ Time-driven

❺ วาง Workflow

Input → Process → Output

❻ สร้าง Version เล็ก

ทำ Feature เดียวก่อน

❼ Test ด้วยข้อมูลจำลอง

ยังไม่ใช้ Production

❽ ตรวจ Permission

Script ขอสิทธิ์อะไร

❾ ตรวจ Duplicate

Run ซ้ำแล้วเกิดอะไร

❿ เพิ่ม Error Handling

จัดการ Failure

⓫ ลด Service Calls

Batch Operation ตามความเหมาะสม

⓬ ตรวจ Quota

โดยเฉพาะงานจำนวนมาก

⓭ เพิ่ม Logging

แต่ไม่ Log Secret

⓮ Test Trigger จริง

ไม่ใช่กด Run อย่างเดียว

⓯ Deploy

หลังตรวจครบ

สำหรับ Workflow Automation ของ comsiam วิธีนี้ช่วยลดความเสี่ยงจาก Script ที่ AI สร้างแล้วไปแก้ข้อมูลหรือส่งข้อความโดยไม่ตั้งใจ เพราะทุกขั้นสามารถตรวจสอบได้ก่อนเปิด Trigger ให้ทำงานจริง

💡 10 Prompt ใช้ Gemini เขียน Google Apps Script

❶ อ่าน Sheets

“เขียน Apps Script อ่านข้อมูล A2:E100 ครั้งเดียวแล้วคืนเป็น Array”

❷ เขียนข้อมูล

“เขียนข้อมูลหลาย Row ด้วย setValues() แทนการเขียน Cell ทีละรายการ”

❸ onEdit

“สร้าง onEdit(e) ทำงานเฉพาะ Sheet Orders, Column D และ Row 2 เป็นต้นไป”

❹ Form Submit

“ออกแบบ Installable Trigger หลัง Form Submit และอธิบาย Permission”

❺ Email

“ส่ง Email เฉพาะ Row Pending และป้องกันการส่งซ้ำ”

❻ Calendar

“สร้าง Calendar Event จาก Sheets และเก็บ Event ID ป้องกัน Duplicate”

❼ Docs

“สร้าง Google Docs จาก Template และแทน Placeholder จาก Sheet”

❽ API

“ใช้ UrlFetchApp เรียก REST API พร้อมตรวจ Status และ JSON Error”

❾ Optimize

“ลด Spreadsheet Service Calls ใน Loop และใช้ Batch Read/Write”

❿ Review

“ตรวจ Script นี้ด้าน Trigger, Permission, Quota, Duplicate, Security และ Error Handling ก่อนใช้งานจริง”

❓ คำถามที่พบบ่อย

Gemini เขียน Google Apps Script ได้ไหม

ได้ Gemini สามารถช่วยสร้าง อธิบาย Debug และ Refactor Apps Script ซึ่งใช้ JavaScript และ Google Workspace Services ได้

Google Apps Script ใช้ภาษาอะไร

Google ระบุว่า Apps Script ใช้ Modern JavaScript และมี Built-in Libraries สำหรับบริการ Google Workspace หลายรายการ

Apps Script ต้องติดตั้งโปรแกรมไหม

ไม่จำเป็นสำหรับการเริ่มต้นทั่วไป Google มี Code Editor บน Browser และ Script ทำงานบน Server ของ Google

Gemini เขียน onEdit ได้ไหม

ได้ แต่ต้องระบุ Sheet, Column และเงื่อนไขให้ชัด รวมถึงเข้าใจข้อจำกัดของ Simple Trigger และ Event Object

Gemini ช่วยสร้าง Trigger ได้ไหม

สามารถช่วยเขียน Code และอธิบายวิธีเลือก Simple หรือ Installable Trigger ได้ โดย Installable Trigger รองรับ Event เพิ่มและสามารถเรียกบริการที่ต้อง Authorization ได้มากกว่า Simple Trigger

Apps Script ที่ Gemini เขียนใช้ได้ทันทีไหม

ไม่ควรใช้ทันทีโดยไม่ Test ต้องตรวจ API, Permission, Trigger, Quota, Duplicate และผลกระทบต่อข้อมูลก่อนเปิดใช้งานจริง

🎯 สรุป

วิธีใช้ Gemini เขียน Google Apps Script ให้ได้ผลดีที่สุดคือเริ่มจาก Google App → Requirement → Data Structure → Trigger → Code → Test → Permission → Error Handling → Quota → Deploy

Gemini สามารถช่วยสร้าง Automation สำหรับ Google Sheets, Docs, Forms, Gmail, Drive และ Calendar รวมถึง Custom Function, Trigger และ Web App ได้ แต่ต้องระบุ Environment ให้ชัดว่าเป็น Google Apps Script เพื่อป้องกัน AI สร้าง Browser JavaScript หรือ Node.js Code ที่ใช้ไม่ได้กับ Apps Script โดยตรง

สำหรับ Google Sheets ควรอ่านและเขียนข้อมูลแบบ Batch เมื่อเหมาะสม แทนการเรียก Service ทีละ Cell จำนวนมาก และ Automation ที่สามารถ Run ซ้ำต้องออกแบบป้องกัน Email, Event หรือ Document ซ้ำตั้งแต่ต้น

Trigger ก็เป็นอีกเรื่องสำคัญ Simple Trigger และ Installable Trigger มีความสามารถและข้อจำกัดต่างกัน จึงควรเลือกจาก Permission และ Event ที่ต้องการจริง

แนวทางของ comsiam คือใช้ Gemini เป็นผู้ช่วยสร้าง Draft และ Review Apps Script แต่ก่อนเปิด Automation จริงต้องตรวจ Code, Authorization, Trigger, Quota และผลลัพธ์กับ Test Data ให้เรียบร้อยเสมอ