在提交事件中使用 Google 应用程序脚本获取 Google 表单中特定 question/item 的值
get value for specific question/item in a Google Form using Google App Script in an on submit event
我已经弄清楚如何使用 https://developers.google.com/apps-script/guides/triggers/events#form-submit_4.
处的信息 运行 在表单提交上 Google 应用程序脚本 project/function
一旦我有了 e
,我就可以调用 e.response
来获得 FormResponse
object and then call getItemResponses()
以获得所有响应的数组。
在不遍历数组并检查每个数组的情况下,有没有办法找到特定问题的 ItemResponse?
我先看到getResponseForItem(item) but it looks like I have to somehow create an Item?
我能否知道如何使用 e.source
获取 Form 对象,然后通过问题找到 Item
,而不遍历所有对象,这样我就可以获得 Item
对象我可以使用 getResponseForItem(item)
?
这是我用来将当前答案集拉入一个对象的代码,因此对“你的名字”这个问题的最新回复变成了 form.yourName,我发现这是通过以下方式找到回复的最简单方法问题:
function objectifyForm() {
//Makes the form info into an object
var myform = FormApp.getActiveForm();
var formResponses = myform.getResponses()
var currentResponse = formResponses[formResponses.length-1];
var responseArray = currentResponse.getItemResponses()
var form = {};
form.user = currentResponse.getRespondentEmail(); //requires collect email addresses to be turned on or is undefined.
form.timestamp = currentResponse.getTimestamp();
form.formName = myform.getTitle();
for (var i = 0; i < responseArray.length; i++){
var response = responseArray[i].getResponse();
var item = responseArray[i].getItem().getTitle();
var item = camelize(item);
form[item] = response;
}
return form;
}
function camelize(str) {
str = str.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
if (+match === 0) return ""; // or if (/\s+/.test(match)) for white spaces
return index == 0 ? match.toLowerCase() : match.toUpperCase();
});
}
//Use with installable trigger
function onSubmittedForm() {
var form = objectifyForm();
Logger.log(form);
//Put Code here
}
几件重要的事情。
- 如果您更改表格中的问题,您将需要更新您的
代码
- 非必答题可能有也可能没有答案,因此请在使用前检查答案是否存在
- 我只使用可安装的触发器,所以我知道它适用于那些。不确定是否使用简单的触发器
- 您可以通过打开日志查看表单对象,这对于查找对象名称很有用
我已经弄清楚如何使用 https://developers.google.com/apps-script/guides/triggers/events#form-submit_4.
处的信息 运行 在表单提交上 Google 应用程序脚本 project/function一旦我有了 e
,我就可以调用 e.response
来获得 FormResponse
object and then call getItemResponses()
以获得所有响应的数组。
在不遍历数组并检查每个数组的情况下,有没有办法找到特定问题的 ItemResponse?
我先看到getResponseForItem(item) but it looks like I have to somehow create an Item?
我能否知道如何使用 e.source
获取 Form 对象,然后通过问题找到 Item
,而不遍历所有对象,这样我就可以获得 Item
对象我可以使用 getResponseForItem(item)
?
这是我用来将当前答案集拉入一个对象的代码,因此对“你的名字”这个问题的最新回复变成了 form.yourName,我发现这是通过以下方式找到回复的最简单方法问题:
function objectifyForm() {
//Makes the form info into an object
var myform = FormApp.getActiveForm();
var formResponses = myform.getResponses()
var currentResponse = formResponses[formResponses.length-1];
var responseArray = currentResponse.getItemResponses()
var form = {};
form.user = currentResponse.getRespondentEmail(); //requires collect email addresses to be turned on or is undefined.
form.timestamp = currentResponse.getTimestamp();
form.formName = myform.getTitle();
for (var i = 0; i < responseArray.length; i++){
var response = responseArray[i].getResponse();
var item = responseArray[i].getItem().getTitle();
var item = camelize(item);
form[item] = response;
}
return form;
}
function camelize(str) {
str = str.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+]/g, '')
return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
if (+match === 0) return ""; // or if (/\s+/.test(match)) for white spaces
return index == 0 ? match.toLowerCase() : match.toUpperCase();
});
}
//Use with installable trigger
function onSubmittedForm() {
var form = objectifyForm();
Logger.log(form);
//Put Code here
}
几件重要的事情。
- 如果您更改表格中的问题,您将需要更新您的 代码
- 非必答题可能有也可能没有答案,因此请在使用前检查答案是否存在
- 我只使用可安装的触发器,所以我知道它适用于那些。不确定是否使用简单的触发器
- 您可以通过打开日志查看表单对象,这对于查找对象名称很有用