【发布时间】:2020-09-08 09:35:14
【问题描述】:
我正在尝试为具有多种表单的 Google 表格开发功能;每个表单在电子表格书中都有一个单独的工作表,我正在使用单独的函数将数据添加到主工作表。代码是容器绑定到工作表文件的。
特别是,我尝试使用单个 onFormSubmit 触发器,然后通过每个表单提交中第一个问题的标题来识别表单,因此 onFormSubmit 运行的适当函数和变量传递不包括时间戳。目前编码的函数如下:
//Selects onFormSubmit action based on contents of form submission. Regex compliance is enforced by forms.
function onFormSubmit(e) {
Logger.log(e);
var responses = e.response.getItemResponses();
var keyResponse = responses[1].getItem().getTitle();
Logger.log(keyResponse);
if (keyResponse == "CUNY ID") {
var cunyID = responses[1].getResponse();
cunyIDQuery(cunyID);
}
else if (keyResponse == "First Name") {
var firstName = responses[1].getResponse();
var lastName = responses[2].getResponse();
var gpa = responses[3].getResponse();
infoSubmit(firstName, lastName, gpa);
}
else if (keyResponsew == "Q1") {
var q1 = responses[1].getResponse();
var q2 = responses[2].getResponse();
var q3 = responses[3].getResponse();
gradeSubmit(q1, q2, q3);
}
else {
wrongFormError();
}
}
不幸的是,由于这是容器绑定的,而且我正在作为附加组件进行测试,因此记录器功能并不是很有帮助,但我确实相信,当我使用 e.namedValues 而不是 e 时。 response.getItemResponses,我能够确定,至少,表单提交似乎正确地传递到了函数中。如果有人能解决这个问题,那就太好了。
【问题讨论】:
-
您可以使用 e.range 值来确定工作表名称,然后可以将其与表单名称相关联。
var sheet=e.range.getSheet(); -
我认为您使用了错误的事件对象。您需要使用电子表格表单提交对象而不是表单表单提交对象。
-
@Cooper 你介意澄清一下吗?我确实使用 UI 对话框创建了触发器,事件源被列为电子表格,事件类型为 On form submit。
标签: google-apps-script google-sheets google-forms