Google Apps Script 自動化 — 用一段程式碼串起整個 Google 工作區

```html Google Apps Script 最被低估的一點,是它不需要伺服器、不需要 OAuth 設定、也不需要付費方案,就能以你自己的身分呼叫 Gmail、Sheets、Drive、Calendar、Forms 的完整 API。任何一個 Google 帳號打開 script.google.com 就能執行程

```html Google Apps Script 最被低估的一點,是它不需要伺服器、不需要 OAuth 設定、也不需要付費方案,就能以你自己的身分呼叫 Gmail、Sheets、Drive、Calendar、Forms 的完整 API。任何一個 Google 帳號打開 script.google.com 就能執行程式碼,這使它成為個人與中小團隊自動化成本最低的落腳點。真正決定專案成敗的不是語法,而是你是否搞懂觸發器模型與配額上限。 它跑在 Google 的機器上,不是你的機器上 Apps Script 是託管執行環境,程式碼儲存在 Google 端並由 Google 的排程器喚醒。這代表關掉電腦、關掉瀏覽器分頁,每天早上 8 點的自動寄信照樣送出——這是它與本機 Python 腳本最根本的差異。你不必租 VPS、不必管 cron daemon、不必處理憑證輪替。 身分驗證也同樣被吸收掉了。腳本以「授權執行者」的身分存取資料,你在腳本裡寫 SpreadsheetApp.openById() 時,權限就是你本人的 Google 帳號權限,不需要建立 service account 或下載 JSON 金鑰。代價是:腳本能碰到的資料範圍,等於你能碰到的資料範圍,這在共用帳號情境下是明確的風險。 執行環境本身也已現代化。 「Apps Script 自 2020 年 2 月起改用 V8 執行環境,支援 ECMAScript 2015 以上語法」(來源:Google for Developers) ,因此 let 、 const 、箭頭函式、樣板字串、解構賦值、 class 全部可用。網路上 2019 年以前的教學仍在使用 var 與 function 的舊 Rhino 寫法,那些寫法能跑,但不必模仿。 觸發器決定自動化的形態 Apps Script 的自動化能力全部來自觸發器,而觸發器分成三種,混用會出問題。 簡單觸發(Simple Triggers) 以特定函式名稱定義,例如 onOpen() 、 onEdit(e) 、 onFormSubmit(e) 。它們自動綁定事件,不需授權即可執行,但受限極嚴:不能存取需要授權的服務。也就是說, onEdit() 裡呼叫 MailApp.sendEmail() 會直接失敗,而且錯誤只出現在執行紀錄裡,使用者端毫無提示。這是新手最常撞的一堵牆。 可安裝觸發(Installable Triggers) 透過編輯器的「觸發條件」介面或 ScriptApp.newTrigger() 建立,跑在完整授權下,可以寄信、可以呼叫外部 API、可以寫入其他試算表。時間驅動的排程(每分鐘、每小時、每天特定時段)也屬於這一類。需要「做事」而不只是「反應」的自動化,一律用可安裝觸發。 Web App 與 API Executable 把 doGet(e) / doPost(e) 部署成網址後,Apps Script 就變成一個免費的 HTTP 端點,可接收 Webhook、可作為 LINE Bot 或 Telegram Bot 的接收端、可讓外部系統寫入 Sheets。部署時的「執行身分」與「存取權限」兩個下拉選單決定一切:選錯身分,Webhook 會回 401;選錯存取權限,外部服務會拿到 Google 登入頁而不是你的 JSON。 配額是架構限制,不是註腳 Apps Script 的配額會直接改變你的程式寫法,必須在動工前就納入設計。 「單次執行時間上限為一般帳號 6 分鐘、Google Workspace 帳號 30 分鐘」(來源:Google Apps Script 配額文件) ,超過即中斷,且沒有續跑機制。處理三千列資料的迴圈若每列都呼叫一次 API,幾乎必定超時。 觸發器另有獨立的每日總量。同一份文件記載 「觸發器每日總執行時間為一般帳號 90 分鐘、Workspace 帳號 6 小時」(來源:Google Apps Script 配額文件) 。每分鐘執行一次、每次跑 10 秒的腳本,一天就是 240 分鐘,一般帳號在中午前就會被停掉。 寄信量同樣分級。 「Gmail 收件人上限為一般帳號每日 100 人、Workspace 帳號每日 1,500 人」(來源:Google Apps Script 配額文件) 。要做行銷發送就別用 Apps Script 直寄,改由腳本呼叫專門的郵件服務 API。 繞過超時的標準做法有兩個:一是批次化 API 呼叫,用 getValues() 一次讀完整個範圍、在記憶體中運算、再用 setValues() 一次寫回,這通常能把數十秒的迴圈壓到一秒內;二是分段執行,把處理進度存進 PropertiesService ,每次只處理固定筆數,再由時間觸發器接力跑完。 一段程式

相關工具書

由 FeiYueh 親自審稿驗證 · 最後更新於 2026-09-13. Independently maintained — not AI-generated boilerplate.

← Back to Blog