0

我有一个谷歌表单,该表单最多询问 40 个问题,并在“表单提交”事件中触发脚本。

大多数情况下,我通过此代码成功引用当前提交的对 var formResponse 的响应,该代码获取所有响应的数组,然后通过 .length-1 获取最新的响应:

var formResponses = form.getResponses();
var i = formResponses.length-1;
var formResponse = formResponses[i];

似乎当表单收集超过 25 个响应时,会出现处理延迟并且脚本将运行,但响应尚未以某种方式添加到 .getResponeses() 数组中。结果是脚本再次运行以获取较旧的响应。当我去查看包含结果的表单和电子表格时,它已按预期更新,但事件已经因错误的响应而触发......所以我想知道我是否正确引用或者是否存在问题在谷歌表单方面。当我从表单中删除所有回复时,该问题暂时得到缓解,但在回复数量达到大约 25 个时再次出现。

谢谢你的支持!

4

1 回答 1

1

在任何 Google Apps 脚本触发器函数中,您最好使用传递给触发器的事件信息,从而完全避免时间问题。您的触发器将拥有自己的私有副本

请参阅了解事件

例如,在附加到表单的脚本中:

function handleFormSubmission( event ) {
  var formResponse = event.response;
  ...
}

同样,在附加到接收表单响应的电子表格的脚本中:

function handleFormSubmission( event ) {
  // Array with values in the same order as they appear in the Spreadsheet.
  var values = event.values; 

  // An object containing the question names and values from the form submission.
  var namedValues = event.namedValues;
  ...
}
于 2013-11-21T19:00:11.257 回答