觸發條件
觸發條件(trigger)讓函式在「開啟檔案、改儲存格、送出表單、時間到了」時自己跑。分兩類:簡易觸發靠函式名稱自動生效;可安裝觸發要在編輯器或用 ScriptApp 建立,權限比較完整。
簡易觸發
只要專案裡有這些名字的函式,繫結檔案就會呼叫它們:
| 函式 | 何時跑 | 常見用途 |
|---|---|---|
onOpen(e) |
有編輯權的人打開檔案 | 加選單 |
onEdit(e) |
有人改了儲存格 | 自動時間戳、驗證 |
onSelectionChange(e) |
選取範圍變了 | 少用;容易太吵 |
onInstall(e) |
安裝編輯器外掛 | 通常改呼叫 onOpen |
doGet / doPost |
網頁應用被請求 | 見 網頁應用 |
function onEdit(e) {
const sheet = e.range.getSheet();
if (sheet.getName() !== "工作區") return;
if (e.range.getColumn() !== 1) return;
e.range.offset(0, 1).setValue(new Date());
}
e.range 是被改的格子。務必先過濾工作表與欄,否則整張表每次按鍵都會跑。
簡易觸發的限制:不能呼叫需要授權的服務(不能寄信、不能開別人的 Drive 檔)、逾時約 30 秒、開檔者若只有檢視權不會跑。
可安裝觸發
編輯器左側時鐘 → 新增觸發條件,或用程式:
function createDailyTrigger() {
ScriptApp.newTrigger("refreshReport")
.timeBased()
.everyDays(1)
.atHour(8)
.create();
}
常見事件:時間驅動、試算表開啟/編輯/變更、表單提交、日曆更新。表單提交、每天寄信、讀 Gmail,都必須用可安裝觸發。
時間驅動的時區看專案設定,不是你筆電的時區。同一函式不要重複按「建立」,否則會疊很多份觸發;上線前到觸發條件頁清乾淨。