getActiveSheet 函數失效 | Google Apps Script

更新日期: 2022 年 9 月 20 日

問題

如題,我最近在學習嘗試將「試算表」與 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 連線,即可順利解決。

真是解決了心頭肉阿,哈哈!

Similar Posts