我已经弄清楚如何使用 https://developers.google.com/apps-script/guides/triggers/events#form-submit_4 中的信息在表单提交上运行 Google App Script 项目/函数。 .
一旦我有e
我可以调用e.response
获得 FormResponse
对象,然后调用 getItemResponses()
获取所有响应的数组。
在不遍历数组并检查每个数组的情况下,有没有办法找到特定问题的 ItemResponse?
我明白了getResponseForItem(item)但看起来我必须以某种方式创建一个 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
}
一些重要的事情。
- 如果您更改表单上的问题,您将需要更新您的信息 代码
- 非必填问题可能有答案,也可能没有答案,因此在使用之前请检查答案是否存在
- 我只使用可安装的触发器,所以我知道它适用于这些触发器。不确定简单的触发器
- 您可以通过打开日志看到表单对象,这对于查找对象名称很有用
关于forms - 在提交事件中使用 Google App 脚本获取 Google 表单中特定问题/项目的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093910/