[英]Google Apps Script: Simple onEdit() trigger breaking when external document objects are introduced
我的問題:為什么下面的腳本中的onEdit()觸發器僅在注釋掉“ OTHER SPREADSHEET”變量時才起作用? 該腳本曾經按書面方式工作,但直到關閉這些變量后,該腳本才起作用。
上下文:我的腳本包含:
僅當注釋掉用於訪問其他電子表格文檔中的對象的變量時,onEdit()觸發器才起作用。 腳本一直運行良好,直到開始表現不佳,然后完全停止功能。 在腳本停止工作之前,我沒有對其進行任何更改。 我在下面提供了代碼的精簡版本,其行為與原始腳本相似。
我的代碼:
//THIS SPREADSHEET
//Variables for this sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var mainSheet = ss.getSheetByName('CURRENT_SHEET_NAME');
//FUNCTION
//This function only works if the other sheet variables below are commented-out
function onEdit(e) {
mainSheet.getRange('J15').setValue('it works!');
}
//OTHER SPREADSHEET
//When not commented-out, the onEdit function does not work
var db = SpreadsheetApp.openById('OTHER_SPREADSHEET_ID');
var dbSheet = db.getSheetByName('OTHER_SHEET_NAME');
它不起作用的原因是在當前情況下無權使用openById
。 您可以在腳本編輯器的“查看-執行記錄”上看到錯誤。 在腳本中,將ss, sheet, mainSheet, db and dbSheet
的變量定義為全局變量。 因此,當onEdit()
啟動時,將執行未經許可的SpreadsheetApp.openById()
。 由此,發生錯誤。 當您注釋掉SpreadsheetApp.openById()
,腳本可以正常工作的原因是這樣的。
為了解決這個問題,有兩種模式。
db and dbSheet
的變量插入到函數中。 這樣,在onEdit()
時,不會使用SpreadsheetApp.openById()
。 onEdit()
作為可安裝觸發器。 這樣,用戶可以使用需要許可的方法。 在這種情況下,不需要修改您的腳本。 可安裝觸發器的詳細信息在此處 。
如果我誤解了您的問題,對不起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.