我有兩個表格送入同一張紙,每張紙我需要不同的觸發器。嘗試使用基于函式的觸發器來觸發,但這不起作用。
此功能有效:
function testTrigger() {
var sheet = SpreadsheetApp.getActive();
ScriptApp.newTrigger("myFunction")
.forSpreadsheet(sheet)
.onChange()
.create();
}
這個失敗了:
function testTriggerTwo() {
var sheet = SpreadsheetApp.openById("...").getSheetByName("Responses");
ScriptApp.newTrigger("myFunction")
.forSpreadsheet(sheet)
.onChange()
.create();
}
和
“例外:引數 (SpreadsheetApp.Sheet) 與 ScriptApp.TriggerBuilder.forSpreadsheet 的方法簽名不匹配。”
有任何想法嗎?
uj5u.com熱心網友回復:
function testTrigger() {
var sheet = SpreadsheetApp.getActive();
ScriptApp.newTrigger("myFunction")
.forSpreadsheet(sheet)//this sheet is a class Spreadsheet
.create();
}
這個失敗了:
function testTriggerTwo() {
var sheet = SpreadsheetApp.openById("...").getSheetByName("Responses");
ScriptApp.newTrigger("myFunction")
.forSpreadsheet(sheet)//this sheet is a class Sheet
.onChange()
.create();
}
一般而言,處理 Google Apps Script 和 Google 的問題之一是,銷售產品的人決定開始使用術語 Sheet 作為電子表格的同義詞,但在 Apps 檔案表中指的是 Excel 之類的作業表,我猜電子表格指的是像作業簿一樣的excel。一個是檔案,另一個是選項卡。在該函式的第二個版本中,當您應該使用類電子表格時,您正在使用類作業表。
我建議使用類似這樣的東西來創建觸發器,以避免為任何給定函式創建多個觸發器的可能性,這可能會產生難以除錯的問題。
function testTrigger() {
const ss = SpreadsheetApp.getActive();
if (ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == "myFunction").length == 0) {
ScriptApp.newTrigger("myFunction")
.forSpreadsheet(ss)
.onChange()
.create();
}
}
通過檢查所有專案專案觸發器都沒有具有相同函式名稱的處理程式,您可以確保沒有針對同一函式的兩個觸發器。
uj5u.com熱心網友回復:
您可以通過獲取作業表名稱(回應所在的位置)來控制它
function onFormSubmit(e) {
var sheet = e.range.getSheet().getName();
//do whatever you want by comparing the sheet name
}
您只能有一個 onFormSubmit 觸發器。但是,您可以通過 if 陳述句做不同的事情
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/344651.html
