我在 App Script 中为单个谷歌表格创建了三个触发器。
此 Google 表格接收来自三种不同 Google 表单的回复。
我设置了一个触发器,当有人填写其中一个表格时执行该触发器,然后根据该表格填写谷歌表格选项卡并执行该功能。
我现在遇到的问题是,当一个人填写表格时,所有三个触发器都会被执行。
代码是这样的:
`function blablabla() {
var sheet = SpreadsheetApp.getActive().getSheetByName('blablablaTab');
var data = sheet.getDataRange().getValues();
var lastline = data.reverse()[0];
var data1 = lastline[2];
var data2 = lastline[1];
var data3 = lastline[3];
var data4 = lastline[6];`
你们能帮帮我吗?
我试图修改一些谷歌表格属性,但仍然不起作用。当填写表格时,将执行三个触发器。
我假设您创建了 3 个不同的函数,其中每个函数都设置为“On Form Submit”触发器,因此每当 3 个表单中的某些表单将其自己的结果提交到您的工作表中时,每个触发器都会执行。
一种可能的解决方案是制作 3 个不同的工作表,其中每个工作表都有自己的触发器和自己的日志记录功能,该功能由“On Form Submit”触发器激活,但是所有 3 个日志记录功能都是将行附加到同一张工作表中。
“我现在遇到的问题是,当一个人填写表格时,所有三个触发器都会被执行。”
您有一个包含三张工作表的电子表格,每张工作表都链接到一个 Google 表单。您有三个
onFormSubmit
触发器,这意味着您必须具有三个独立的功能 - 每个工作表/表格一个。您的问题是,当收到表单提交时,所有三个功能都会被触发。
你应该只有一个
onFormSubmit
触发器;此触发器应仅链接到 one 函数。
您可以采用多种策略来创建单个函数。最明显的是将三个功能合并为一个功能,如下所示。这可能不是最有效的,但是函数的设计并不是这个答案的一部分。
function getResponse(e) {
// Logger.log(JSON.stringify(e)) // DEBUG
// test for response from form #1
if (e.range.getSheet().getName() === "Form Responses 1"){
// Logger.log("DEBUG: received a form 1 response")
// do stuff
// insert code from form 1 script
}
// test for response from form #2
if (e.range.getSheet().getName() === "Form Responses 2"){
// Logger.log("DEBUG: received a form 2 response")
// do stuff
// insert code from form 2 script
}
// test for response from form #3
if (e.range.getSheet().getName() === "Form Responses 3"){
// Logger.log("DEBUG: received a form 3 response")
// do stuff
// insert code from form 3 script
}
}