在提交事件中使用 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

}

几件重要的事情。

  • 如果您更改表格中的问题,您将需要更新您的 代码
  • 非必答题可能有也可能没有答案,因此请在使用前检查答案是否存在
  • 我只使用可安装的触发器,所以我知道它适用于那些。不确定是否使用简单的触发器
  • 您可以通过打开日志查看表单对象,这对于查找对象名称很有用