GAS 專案類型:容器與獨立 (Container-bound vs Standalone)
在 Google Apps Script (GAS) 中,根據專案建立的方式與存放位置,可以分為兩種類型:容器限制腳本 (Container-bound Script) 與 獨立腳本 (Standalone Script)。了解兩者的差異對於規劃自動化流程非常重要。
容器限制腳本 (Container-bound Script)
這種腳本是「附著」在特定的 Google Workspace 檔案(如試算表、文件、簡報或表單)中。
- 建立方式:在試算表中點擊「擴充功能」>「Apps Script」。
- 主要特色:
- 在雲端硬碟中不會看到獨立的腳本檔案,它跟著宿主檔案走。
- 可以存取宿主檔案特有的 UI,例如自定義選單或側邊欄。
- 捷徑方法:可以使用
SpreadsheetApp.getActiveSpreadsheet()取得當前開啟的試算表。
容器限制腳本的限制是,它不能被輕易轉移到其他檔案使用,且如果宿主檔案被刪除,腳本也會跟著消失。
獨立腳本 (Standalone Script)
這種腳本在雲端硬碟中是一個獨立的檔案。
- 建立方式:在 Google Drive 點擊「新增」>「更多」>「Google Apps Script」,或在 GAS 儀表板 點擊「新專案」。
- 主要特色:
- 在雲端硬碟中擁有獨立的檔案名稱與 ID。
- 適合用來執行不特定於某個檔案的任務(例如:定時整理某個資料夾、呼叫 API)。
- 開啟方式:必須透過
SpreadsheetApp.openById(id)或openByUrl(url)來開啟特定的試算表。
兩者比較表
| 特性 | 容器限制腳本 (Container-bound) | 獨立腳本 (Standalone) |
|---|---|---|
| 存儲位置 | 附屬於宿主檔案 (Sheets/Docs/Forms) | 獨立檔案於 Google Drive |
| 權限 | 通常繼承宿主檔案的權限 | 獨立設置權限 |
| UI 互動 | 支援自定義選單 getUi() | 有限的互動性 (除非部署為 Web App) |
| 自動化觸發 | 支援 onOpen, onEdit 等簡單觸發器 | 需手動設定可安裝觸發器 |
| 宿主檔案存取 | getActiveSpreadsheet() | 需使用 openById() |
撰寫建議
- 如果你的腳本是專門為了某一張試算表設計的邏輯(例如按鈕點擊後處理該表資料),建議使用 容器限制腳本。
- 如果你的腳本是通用工具(例如將多個表單合併、定期清理過期檔案),建議撰寫為 獨立腳本。
/**
* 容器限制腳本範例:直接取得當前試算表
*/
function boundScriptDemo() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
console.log('當前試算表名稱:', ss.getName());
}
/**
* 獨立腳本範例:透過 ID 開啟特定試算表
*/
function standaloneScriptDemo() {
const fileId = 'YOUR_SPREADSHEET_ID_HERE';
const ss = SpreadsheetApp.openById(fileId);
console.log('開啟的試算表名稱:', ss.getName());
}