簡體   English   中英

Google Apps腳本:引入外部文檔對象時,簡單的onEdit()觸發中斷

[英]Google Apps Script: Simple onEdit() trigger breaking when external document objects are introduced

我的問題:為什么下面的腳本中的onEdit()觸發器僅在注釋掉“ OTHER SPREADSHEET”變量時才起作用? 該腳本曾經按書面方式工作,但直到關閉這些變量后,該腳本才起作用。

上下文:我的腳本包含:

  • 一個簡單的onEdit()觸發器
  • 用於訪問當前工作表中的對象以及單獨電子表格文檔中其他對象的變量

僅當注釋掉用於訪問其他電子表格文檔中的對象的變量時,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() ,腳本可以正常工作的原因是這樣的。

為了解決這個問題,有兩種模式。

  1. db and dbSheet的變量插入到函數中。 這樣,在onEdit()時,不會使用SpreadsheetApp.openById()
  2. 安裝onEdit()作為可安裝觸發器。 這樣,用戶可以使用需要許可的方法。 在這種情況下,不需要修改您的腳本。

可安裝觸發器的詳細信息在此處

如果我誤解了您的問題,對不起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM