如何在提交事件处理程序中获取表单值?
How to get form values in the submit event handler?
我正在尝试从一个非常简单的 Google 表单开始,该表单仅包含几个问题(只有 2 个选项和一段简短的文本的多项选择)。创建好后,我打开脚本编辑器,输入
function onSubmit(e) {
Logger.log("onSubmit(%s)", JSON.stringify(e));
}
并使用 "Edit" 菜单中的 "Current project's triggers" 将 onSubmit
配置为 "form submit" 触发器的处理程序。
现在填写表格并提交确实会调用处理程序,但我只在日志中看到:
[17-04-15 18:56:23:584 CEST] onSubmit({"response":{},"source":{},"authMode":{},"triggerUid":1870249629})
即响应字段为空。我也尝试过使用 FormApp.getActiveForm().getResponses()
,但它 return 也是一个由几个空 objects 组成的数组(OTOH,FormApp.getActiveForm().getTitle()
确实 return 我给的标题形式)。
我想我需要给脚本一些额外的权限来访问表单数据,但我不知道该怎么做,即使这真的是问题所在。
有人知道为什么我没有得到表单值吗?我应该怎么做才能得到它们?提前致谢!
有两种检索提交值的模式。对于这两种模式,必须将用于从表单提交中检索值的函数安装为触发器。 Installable Triggers 的详细信息是 https://developers.google.com/apps-script/guides/triggers/installable.
1。脚本在电子表格中打开。
在这种情况下,通过安装触发器,您可以通过脚本检索提交的值。事件对象的详细信息为https://developers.google.com/apps-script/guides/triggers/events#form-submit.
脚本:
function onSubmit(e){
Logger.log("%s", JSON.stringify(e));
}
结果:
{
"values": [
"date and time",
"test"
],
"namedValues": {
"fromtestform": [
"test"
],
"timeStamp": [
"date and time"
]
},
"range": {
"columnStart": 1,
"rowStart": 2,
"rowEnd": 2,
"columnEnd": 2
},
"source": {},
"authMode": {},
"triggerUid": #####
}
2。脚本在表单上打开。
在这种情况下,可以通过以下脚本检索提交的值。详细信息为https://developers.google.com/apps-script/reference/forms/form-response.
脚本:
function onSubmit(e){
Logger.log("authMode=%s, source.getId()=%s", e.authMode, e.source.getId());
var items = e.response.getItemResponses();
for (i in items){
Logger.log("getItem().getTitle()=%s, getResponse()=%s", items[i].getItem().getTitle(), items[i].getResponse());
}
}
结果:
authMode=FULL, source.getId()=### form ID ###
getItem().getTitle()=## item's title ##, getResponse()=test
如果我误解了你的问题,我很抱歉。
我正在尝试从一个非常简单的 Google 表单开始,该表单仅包含几个问题(只有 2 个选项和一段简短的文本的多项选择)。创建好后,我打开脚本编辑器,输入
function onSubmit(e) {
Logger.log("onSubmit(%s)", JSON.stringify(e));
}
并使用 "Edit" 菜单中的 "Current project's triggers" 将 onSubmit
配置为 "form submit" 触发器的处理程序。
现在填写表格并提交确实会调用处理程序,但我只在日志中看到:
[17-04-15 18:56:23:584 CEST] onSubmit({"response":{},"source":{},"authMode":{},"triggerUid":1870249629})
即响应字段为空。我也尝试过使用 FormApp.getActiveForm().getResponses()
,但它 return 也是一个由几个空 objects 组成的数组(OTOH,FormApp.getActiveForm().getTitle()
确实 return 我给的标题形式)。
我想我需要给脚本一些额外的权限来访问表单数据,但我不知道该怎么做,即使这真的是问题所在。
有人知道为什么我没有得到表单值吗?我应该怎么做才能得到它们?提前致谢!
有两种检索提交值的模式。对于这两种模式,必须将用于从表单提交中检索值的函数安装为触发器。 Installable Triggers 的详细信息是 https://developers.google.com/apps-script/guides/triggers/installable.
1。脚本在电子表格中打开。
在这种情况下,通过安装触发器,您可以通过脚本检索提交的值。事件对象的详细信息为https://developers.google.com/apps-script/guides/triggers/events#form-submit.
脚本:
function onSubmit(e){
Logger.log("%s", JSON.stringify(e));
}
结果:
{
"values": [
"date and time",
"test"
],
"namedValues": {
"fromtestform": [
"test"
],
"timeStamp": [
"date and time"
]
},
"range": {
"columnStart": 1,
"rowStart": 2,
"rowEnd": 2,
"columnEnd": 2
},
"source": {},
"authMode": {},
"triggerUid": #####
}
2。脚本在表单上打开。
在这种情况下,可以通过以下脚本检索提交的值。详细信息为https://developers.google.com/apps-script/reference/forms/form-response.
脚本:
function onSubmit(e){
Logger.log("authMode=%s, source.getId()=%s", e.authMode, e.source.getId());
var items = e.response.getItemResponses();
for (i in items){
Logger.log("getItem().getTitle()=%s, getResponse()=%s", items[i].getItem().getTitle(), items[i].getResponse());
}
}
结果:
authMode=FULL, source.getId()=### form ID ###
getItem().getTitle()=## item's title ##, getResponse()=test
如果我误解了你的问题,我很抱歉。