繫結與獨立專案
Apps Script 專案有兩種掛法。選錯的話,getActiveSpreadsheet() 會是空的、選單加不上去,或腳本無法跟著試算表一起複製。
繫結腳本(container-bound)
從試算表、文件、簡報或表單的 擴充功能 → Apps Script 建立的專案,會綁在那個檔案上。
- 能用
SpreadsheetApp.getActive()、DocumentApp.getActiveDocument()等「目前這個檔案」。 - 能改該檔的選單、側欄、對話方塊。
- 簡易觸發
onOpen、onEdit只在繫結腳本有效。 - 複製試算表時,腳本通常一併複製(權限仍要重新授權)。
適合:這一份表專用的自動化、給同事用的自訂選單。
獨立腳本(standalone)
到 script.google.com 按「新增專案」,或用 clasp 建立 --type standalone。
- 檔案活在雲端硬碟,不依附某一份 Sheet。
- 要用
SpreadsheetApp.openById("試算表ID")或openByUrl()去開檔。 - 無法替「某一份試算表」加選單(除非另外做外掛)。
- 適合排程、跨多個檔案、之後要發佈成網頁應用或 Workspace 外掛。
試算表網址裡 /d/ 後面那串就是 ID:
function writeToWorkbook() {
const ss = SpreadsheetApp.openById("試算表ID");
ss.getSheetByName("工作表1").getRange("A1").setValue(new Date());
}
怎麼選
| 需求 | 建議 |
|---|---|
| 只服務這一本試算表、要加選單 | 繫結 |
| 每天彙整很多份表、或沒有「主檔」 | 獨立 |
| 要發佈成外掛、Chat 應用、網頁應用 | 獨立(再設定清單檔) |
| 本機用 clasp、Git 管理 | 兩種都可以;獨立較好拆專案 |
同一份試算表也可以同時有繫結腳本,再被獨立腳本用 ID 開啟。權限以執行該腳本的 Google 帳號為準,不是檔案擁有者自動等於腳本擁有者。
清單檔 appsscript.json 記錄時區、OAuth 範圍、外掛/網頁應用設定。在編輯器「專案設定」勾選「在編輯器中顯示 appsscript.json」就能看到。進階部署見 網頁應用 與 外掛。