【问题标题】:What is the best way to reference current response?参考电流响应的最佳方法是什么?
【发布时间】:2013-09-12 18:48:15
【问题描述】:

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

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

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

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

感谢您的支持!

【问题讨论】:

  • 所有文档都表明上述代码是有效的。一旦表单收集了 25 个以上的响应,就会出现问题,因此我在脚本中引入了延迟,以允许谷歌在我引用它之前完成将响应发布到数组。我正在使用 `Utilities.sleep(30000);` 等待 30 秒,然后再执行脚本的其余部分。

标签: google-apps-script google-forms


【解决方案1】:

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

Understanding Events

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

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;
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2019-10-25
    • 2017-10-23
    • 2018-04-28
    相关资源
    最近更新 更多