Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如果有多个表单向单个电子表格发送响应,google如何知道提交表单时要执行哪个onsubmit触发器_Google Apps Script - Fatal编程技术网

Google apps script 如果有多个表单向单个电子表格发送响应,google如何知道提交表单时要执行哪个onsubmit触发器

Google apps script 如果有多个表单向单个电子表格发送响应,google如何知道提交表单时要执行哪个onsubmit触发器,google-apps-script,Google Apps Script,我需要某人的澄清 我知道在新的谷歌表单中,多个表单可以将他们的回复发送到一个电子表格中 因此,我创建了两个谷歌表单,让他们都将回复发送到一个新的谷歌电子表格。然后,我在电子表格中创建了两个脚本(不是表单)。每个脚本都设置为在提交表单时触发。下面是两个简单的脚本 function form2() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1"); sheet.getR

我需要某人的澄清

我知道在新的谷歌表单中,多个表单可以将他们的回复发送到一个电子表格中

因此,我创建了两个谷歌表单,让他们都将回复发送到一个新的谷歌电子表格。然后,我在电子表格中创建了两个脚本(不是表单)。每个脚本都设置为在提交表单时触发。下面是两个简单的脚本

function form2() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
  sheet.getRange(sheet.getLastRow(),3).setValue("This is for test 2");
}

function form1() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 2");
  sheet.getRange(sheet.getLastRow(),3).setValue("This is for test 1");
}

不知何故,谷歌正在为适当的表单运行正确的脚本!这怎么可能?也就是说,当有人提交form1时会自动触发form1(),当有人提交form2时会自动触发form2()

所以我的问题是,“谷歌如何知道在提交表单时运行哪个脚本?”

谢谢。如果可能的话,我想将所有表单数据发送到一个电子表格,但我不想设置不可靠的设置

-杰伊


谢谢你的回答。我想我是在你的帮助下弄明白的。以下是我认为正在发生的事情。如果有人能证实或反驳我的结论,那将对我大有帮助

在谷歌应用程序中创建表单有两种方法

  • 直接创建一个表单
  • 首先创建电子表格,然后从电子表格的菜单栏中选择“表格”,然后选择“创建表格”,创建表格
但无论您如何创建表单,最终都会有两个文件。一个用于表单,另一个用于从表单接收数据的电子表格。如果将脚本放入表单和电子表格中,则在提交表单时两者都将运行。不同之处在于表单中的任何脚本都将受到权限限制。也就是说,表单中的任何脚本都将无法访问电子表格,因为电子表格中的脚本将拥有您拥有的所有权限(只要触发器设置在您的帐户下)

现在


Google Drive中的新工作表现在可以接收多个表单的响应,而Google Drive中的旧工作表只能接收一个表单的响应。这最终导致了我的困惑,西基多的答案是正确的。似乎接收电子表格将运行任意多个提交脚本,但无论是一个还是多个脚本,它们都将在电子表格接收的所有表单数据上运行。也就是说,当接收电子表格从任何表格接收表格数据时,电子表格中的所有onsubmit脚本都将被执行。

这两个脚本都应该被执行,可能是通过使用文字字符串,更改是不可见的

尝试运行以下更改:

函数形式2(e){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1');
sheet.getRange(sheet.getLastRow(),3).setValue(e.values);
}
功能表1(e){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 2');
sheet.getRange(sheet.getLastRow(),3).setValue(e.values);
}