getActiveSheet 函數失效 | Google Apps Script
更新日期: 2024 年 9 月 14 日
問題
如題,我最近在學習嘗試將「試算表」與 Google Apps Script 結合使用。
但當我使用到 getActiveSheet 此函數時,發現他不會隨著工作表的切換,轉換執行程式碼的位置。
我原本預期以下公式,並會在我 456 此工作表中執行。
function learnBasics() {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
activeSheet.getRange(2,2,3).setValue("oo");
Logger.log(SpreadsheetApp.getActiveSheet().getName());
}
但是當我執行時,卻發現公式仍不斷在 123 此報表運作。
為了解決此問題,我還去翻了 Google 的官方說明,文件中寫道:
getActiveSheet()
在試算表中取得使用中的工作表。
試算表中的有效工作表是指在試算表 UI 中顯示的工作表。
這不是擺明要弄死人嗎,讓人完全搞不清楚程序。
解決辦法
後來我去查看國外網友的討論,發現某人給出一個解答。
I just discovered that getActiveSheet() does indeed work the way I was hoping it would, but only if you run the function through a custom menu UI built using SpreadsheetApp.getUi().createMenu(…), which needs an onOpen() trigger
翻成中文,是指若想以 UI 上呈現工作表作為運作基礎,我們需要先將該工作表與 Apps Script 串聯,才能正常運作。
因此,我們只需要在新建的工作表中,再點擊一次 Apps Script 連線,即可順利解決。
真是解決了心頭肉阿,哈哈!