获取当前响应onSubmit

时间:2014-02-08 15:21:40

标签: google-apps-script

有没有办法找出Google表格的当前回复(以编程方式)?

onSubmit函数中。

查看their documentation,但我必须提供respondId

如何找到respondId

他们的一个剪切代码是:

// Open a form by ID and log the responses to each question.
 var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
 var formResponses = form.getResponses();
 for (var i = 0; i < formResponses.length; i++) {
   var formResponse = formResponses[i];
   var itemResponses = formResponse.getItemResponses();
   for (var j = 0; j < itemResponses.length; j++) {
     var itemResponse = itemResponses[j];
     Logger.log('Response #%s to the question "%s" was "%s"',
         (i + 1).toString(),
         itemResponse.getItem().getTitle(),
         itemResponse.getResponse());
   }
 }

更新:

function onSubmit(e) {
  /* Get values entered by filling the form */
  var itemResponses = e.response.getItemResponses();
  var myWantedValue = itemResponses[COLUMN_NUMBER].getResponse();
}

注意:通过传递e(vent)作为参数,可以通过提交实时表单来访问值,而不是通过脚本编辑器访问!

4 个答案:

答案 0 :(得分:11)

此代码为您提供上次表单回复的值,是您要查找的内容吗?

function myFunction() {
  var formResponses = FormApp.getActiveForm().getResponses();
  Logger.log(formResponses.length);
  var formResponse = formResponses[formResponses.length-1];
  var itemResponses = formResponse.getItemResponses();
  for (var j = 0; j < itemResponses.length; j++) {
    var itemResponse = itemResponses[j];
    Logger.log('Last response to the question "%s" was "%s"',
               itemResponse.getItem().getTitle(),
               itemResponse.getResponse());
  }
}

答案 1 :(得分:0)

@Serge我使用你的代码在使用form.setConfirmationMessage()后跟form.getConfirmationMessage()提交表单时显示答复者的答案。我使用了表单onsubmit触发器。然而,它总是返回前一个受访者的答案。我也尝试使用e.response,但我再次得到了前一位受访者的回复。我还做了一个Logger.log(form.getConfirmationMessage())来检查并发现它显示当前响应者的响应。然而,受访者提交的实际页面是先前的受访者。有线索吗?

更新:我注意到其他人也发布了这个问题:看到这个 https://productforums.google.com/forum/#!topic/docs/cygTFXtyy5I和此 http://code.google.com/p/google-apps-script-issues/issues/detail?can=2&start=0&num=100&q=&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner&groupby=&sort=&id=3507

答案 2 :(得分:0)

答案 3 :(得分:0)

您正在尝试阅读触发执行onSubmit()的确切响应,以便对特定数据运行其他进程,例如发送确认电子邮件。

如果以上是正确的:

请尝试阅读存储回复的Google表格,而不是将表单用作后续处理的数据源。看起来问题可能是相同的:读取数据源(表单本身或存储数据的表单)并不会指向触发onSubmit()事件的确切条目。

不同之处在于,您可以在工作表中创建“reply_sent”列,为每个表单响应进行后处理的时刻添加时间戳,例如,根据其内容发送自动回复。

然后,当运行onSubmit()时,它会遍历所有响应和进程,不仅是最后一个响应,还是触发onSubmit()函数的响应,还包括任何其他可能未被撤消的响应reason(“reply_sent”字段为空)。此方法的最后一个好处是您的脚本正在记录它的行为方式,因为日期与每个响应一起记录,因为它触发了obSubmit()。