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());
}