【问题标题】:Distinguish between first submission of google form and remaining submissions where user is just updating区分第一次提交谷歌表单和用户刚刚更新的剩余提交
【发布时间】:2016-05-19 11:32:29
【问题描述】:

是否有可能以某种方式区分谷歌表单的第一次提交和用户只是更新他之前的回复的相同表单的剩余提交?

我使用了 onSubmit 触发器,每次用户提交表单时都会发送电子邮件通知。问题是当同一个用户更新他的表单时(即他犯了一个错误)时会触发同一个电子邮件。我想在更新时停止发送这些电子邮件或更改电子邮件信息?

您能否建议是否有可能实现这一目标?我认为 onChange(e) 可能有效。

【问题讨论】:

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


    【解决方案1】:

    在收集表单提交的工作表中,已编辑的条目有注释“响应者更新了此值”。脚本可以获取这些注释;如果至少有一个是非空的,那么它就是一个编辑。下面是一个脚本示例(由表单提交触发),它为新条目和已编辑条目发送不同的电子邮件。

    function notify(e) {
      if (e.range.getNotes()[0].join('')) {
        MailApp.sendMail('me@example.com', 'updated entry', 'user edited submission');
      }
      else {
        MailApp.sendMail('me@example.com', 'new entry', 'user submitted form');
      }
    }
    

    【讨论】:

    • 感谢您的回答。如果我想更新特定单元格的注释,我可以执行 e.range.getNotes()[0][1] 以将其与“响应者更新此值”相匹配,如果已更新为该值,请设置注释到一个特定的值?我试过了,当我使用 logger.log 输出这个“e.range.getNotes()[0][1]”时,我得到了 undefined 你知道为什么会这样吗?
    • 如果该函数被表单提交触发,则接收事件对象(这里命名为e)。如果您尝试直接运行它,e 将是未定义的。
    • 该函数是由表单提交触发的,所以这就是为什么我不确定为什么我得到未定义的原因。在日志中,我输出: Logger.log("testing 1" + e.range.getNotes()[0][1]); Logger.log("测试 2" + e.range.getNotes()[0][2]); Logger.log("测试 3" + e.range.getNotes()[0][3]);第一个输出正确的值,但接下来的两个给出“未定义”。知道为什么会这样吗?
    • 当我看到 e.range.getNotes()[0][2] 未定义时,我的反应是记录 e.range.getNotes()[0] 以检查它有多少条目。
    • 有 3 个条目,可能是索引 - 我会尝试输出所有内容,看看是否是这个原因。除了上述原因之外,还有其他原因导致未定义吗?
    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多