use*_*680 5 google-apps-script
我需要有人澄清。
我了解多个表单可以将其回复发送到新 Google 表格中的单个电子表格。
所以我创建了两个 Google 表单,并让它们都将他们的回复发送到一个新的 Google 电子表格。然后我在电子表格中(而不是在表单中)创建了两个脚本。每个脚本都设置为在提交表单时触发。这是两个简单的脚本。
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");
}
Run Code Online (Sandbox Code Playgroud)
不知何故,谷歌正在为适当的表单运行正确的脚本!怎么可能?即有人提交form1时自动触发form1(),有人提交form2时自动触发form2()。
所以我的问题是,“Google 如何知道提交表单时要运行哪个脚本?”。
谢谢。如果可能,我想将所有表单数据发送到一个电子表格,但我不想设置不可靠的内容。
-杰
感谢 wchiquito 的回答。我想我在你的帮助下解决了这个问题。这是我认为正在发生的事情。如果有人可以证实或反驳我的结论,那对我来说将是一个很大的帮助。
在 Google Apps 中有两种创建表单的方法。
但是无论您如何创建表单,最终都会有两个文件。一种用于表单,一种用于从表单接收数据的电子表格。如果您将脚本放在表单和电子表格中,则在提交表单时两者都会运行。不同之处在于表单中的任何脚本都将受到权限限制。也就是说,表单中的任何脚本都无法访问电子表格,因为电子表格中的脚本将拥有您拥有的所有权限(只要在您的帐户下设置触发器)。
现在...
Google Drive 中的新表格现在可以接收来自多个表单的回复,而 Google Drive 中的旧表格只能接收一个表单回复。这最终导致我的困惑,wchiquito 的答案是正确的。似乎接收电子表格将运行任意数量的 onsubmit 脚本,但无论是一个还是多个,它们都将在电子表格接收的所有表单数据上运行。也就是说,当接收电子表格从任何表格接收表格数据时,电子表格内的所有提交脚本都将被执行。
两个脚本都应该被执行,也许通过使用文字字符串,更改是不可见的。
尝试进行以下更改来运行:
function form2(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 1');
sheet.getRange(sheet.getLastRow(), 3).setValue(e.values);
}
function form1(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses 2');
sheet.getRange(sheet.getLastRow(), 3).setValue(e.values);
}
Run Code Online (Sandbox Code Playgroud)