Google 表格的 App 脚本中的两个或多个函数

问题描述 投票:0回答:2

我在 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];`

你们能帮帮我吗?

我试图修改一些谷歌表格属性,但仍然不起作用。当填写表格时,将执行三个触发器。

google-apps-script google-sheets google-forms google-apps
2个回答
0
投票

我假设您创建了 3 个不同的函数,其中每个函数都设置为“On Form Submit”触发器,因此每当 3 个表单中的某些表单将其自己的结果提交到您的工作表中时,每个触发器都会执行。

一种可能的解决方案是制作 3 个不同的工作表,其中每个工作表都有自己的触发器和自己的日志记录功能,该功能由“On Form Submit”触发器激活,但是所有 3 个日志记录功能都是将行附加到同一张工作表中。


0
投票

我现在遇到的问题是,当一个人填写表格时,所有三个触发器都会被执行。

您有一个包含三张工作表的电子表格,每张工作表都链接到一个 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 
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.