【问题标题】:Unable to access all ItemResponses in a FormResponse无法访问 FormResponse 中的所有 ItemResponse
【发布时间】:2018-05-07 14:02:55
【问题描述】:

我在附加到 Google 表单的 Apps 脚本函数中出现了一个奇怪的错误。

我调用响应,然后将它们列在一个数组中。日志显示数组有6个项目,匹配6个表单问题:

[18-05-08 00:13:31:900 AEST] [ItemResponse, ItemResponse, ItemResponse, ItemResponse, ItemResponse, ItemResponse]

当我调用前两个时,它工作得很好。再多的话,它就会出错并说undefined。

// Open a form by ID and log the responses to each question.
var form = FormApp.getActiveForm();
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
  var formResponse = formResponses[i];
  var editUrl = String(formResponse.getEditResponseUrl());
  var theResponseId = formResponses.indexOf(form);
  var itemResponses = formResponse.getItemResponses();
  var timestamp = formResponse.getTimestamp();  
  var firstName = itemResponses[0].getResponse();
  var lastName = itemResponses[1].getResponse();
  Logger.log(itemResponses); // Log shows there are 6 objects in the array. Matching the amount of Form Questions.

  // If I try to use these variables below, it doesn't work and the script 'breaks' at this point.

  //var number = itemResponses[2].getResponse();
  //var email = itemResponses[3].getResponse();
  //var firstName2 = itemResponses[4].getResponse();
  //var comments = itemResponses[5].getResponse();
}

注意:我已经尝试过FormApp.openById('id');,看看获取活动表单是否有问题。这没有帮助。

【问题讨论】:

  • @tehhowch 感谢您一直在这里指导我。我已经更新了日志
  • 你得到的实际完整错误是什么?根据documentation for ItemResponse,我没有发现任何问题。
  • 这只是表明答案已提交到 2 个问题的表单。您确定您的表单包含 6 个问题吗?
  • 如果您在扩展 from 之前提交了一些回复,那么对于旧回复,这些新问题的答案肯定是“未定义”
  • 不用担心 - 很高兴我能提供帮助。我在下面发布了答案。

标签: arrays google-apps-script google-forms


【解决方案1】:

这是因为一些答案已提交到 2 个问题的表单中。如果您在更新表单之前提交了一些回复,这些新问题的答案将是“未定义的”。

【讨论】:

  • 即使有修复,我也遇到了另一个相关问题。如果我提交了一个表格,并且在提交时只填写了一半的表格。它实际上破坏了脚本并减少了数组以供将来使用。你知道为什么会这样吗?
  • ----------------- 已修复 ----------------- 如果我调用了 .getResponse 并且itemResponses 变量未定义,导致错误。所以我为每个看起来像这样的变量做了一个 if 语句 -> if(itemResponses[3] != undefined){ var email = itemResponses[3].getResponse; };
  • 在循环中,您可以将其替换为 if ( itemResponses[j] ) { // do something }。它检查 null、未定义、空字符串 ("") 等。
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 2016-07-03
  • 2021-03-16
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多