我有两个Google表单,可以将数据发送到一个电子表格中的两个标签页。
我已经设置了一个包含两个函数的脚本。我想第一个函数在提交第一个表单时运行。并且,第二个函数在提交第二个表单时运行。
问题是:在设置触发器onformsubmit时,它不允许您指定哪种形式。
因此,每当完成第一个表单时,它都会运行这两个函数。
问题:如何仅在提交特定表单时限制功能运行?
答案 0 :(得分:5)
正如我在评论中建议的那样,您可以通过分析响应对象的内容来确定表单提交的来源。
以下是一个基本示例:它会向您发送一封电子邮件,告诉您哪个表单已提交,但您当然可以使用相同的条件测试来选择要运行的操作。
function formSubmitOriginTest(e){
// Logger.log(JSON.stringify(e));
// example value : {"namedValues":{"Untitled Question 2":["test"],"Timestamp":["8/17/2014 11:22:47"]},"values":["8/17/2014 11:22:47","test"],"source":{},"range":{"rowStart":3,"rowEnd":3,"columnEnd":2,"columnStart":1},"authMode":{}}
if(e.namedValues["Untitled Question 2"]!=undefined){// only form B has one question with this exact title, that's enough to identify it.
MailApp.sendEmail(Session.getActiveUser().getEmail(),'form B has been submitted','');// optionally include the answers in the email body if you want
}else{
MailApp.sendEmail(Session.getActiveUser().getEmail(),'form A has been submitted','');// optionally include the answers in the email body if you want
}
}
答案 1 :(得分:5)
另一种方法是通过sheet
属性查看响应事件对象中的range
名称。以下是我如何确定触发提交的表单的示例:
// set the sheet name that stores the form responses you care about here:
function getSourceSheetName() { return 'Form Responses 1'; }
function submit(eventObj) {
var range = eventObj.range;
var eventSourceSheetName = range.getSheet().getName();
var givenSourceSheetName = getSourceSheetName();
// if the source sheet (from form response sheet) is not the same as the specified form response sheet, quit (return) so extra forms don't trigger the code
if (eventSourceSheetName.toUpperCase() !== givenSourceSheetName.toUpperCase() ) {
Logger.log('A different form just submitted data - quit code');
return;
}
// you now know which form submitted the response, so do whatever you want!
// ... your code goes here
}
基本上,此代码通过range.getSheet().getName()
获取表单响应来自的表单名称。接下来,它检查该名称是否是我们正在寻找的指定名称(在函数getSourceSheetName()
中指定。
我认为通过以下方式获取活动工作表名称也是可能的:
eventObj.source.getActiveSheet().getName();
如果您不想使用“范围”。
我希望这有帮助!
答案 2 :(得分:1)
我只是看了一些文档,发现了这个:
它声明:
创建并返回与给定表单关联的FormTriggerBuilder。
此外:
var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
ScriptApp.newTrigger('myFunction')
.forForm(form)
.onFormSubmit()
.create();
该代码似乎与特定表格相关联。