【问题标题】:Get the current response onSubmit获取当前响应 onSubmit
【发布时间】:2021-04-10 02:17:54
【问题描述】:

有什么方法可以找出 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) 作为参数,可以通过提交实时表单而不是脚本编辑器来访问值!

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    此代码为您提供最后一个表单响应的值,这是您要查找的吗?

    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!
    • 谢谢!两种方法确实返回相同的结果,我之所以选择这个是因为我想使用您的初始方法:-)
    • @Sergeinsas 我的 itemResponse.getScore() 为空。我正在使用相同的脚本。帮帮我。
    • 请不要在 cmets 中提问,如果您有新问题,请提出新问题并包含您正在使用的代码。
    • 如果其他人碰巧同时提交表单,此解决方案是否会引发竞争条件?
    【解决方案2】:

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

    如果以上正确:

    不要将表单用作以后处理的数据源,而是尝试阅读存储响应的 Google 表格。看起来问题是一样的:读取任何一个数据源(表单本身,或存储数据的工作表),都不会指向触发 onSubmit() 事件的确切条目。

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

    然后,当 onSubmit() 运行时,它会遍历所有响应并处理不仅收到的最后一个响应或触发 onSubmit() 函数的响应,还会处理任何其他可能未响应的响应原因(“reply_sent”字段为空白)。这种方法的最后一个好处是您的脚本会记录它的行为方式,因为在触发 obSubmit() 时,每个响应都会记录一个日期。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-24
        • 2023-03-02
        • 1970-01-01
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多