google-apps-script - 如何仅向最后一次提交的 Google 表单发送电子邮件?

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

我正在使用 Google 表单作为教室“商店”,供学生购买元素。学生收银员将填写表格,然后表格会将电子邮件收据发送给购买元素的学生。该电子邮件使用我当前的代码和触发器发送得很好,但是,它会向每个新提交的所有提交发送一封电子邮件。我只想将其发送到最后一次提交。我知道这个问题可能有一个简单的解决办法,但我只是忽略了一些事情。这是我当前的代码:

function sendAutomatedEmails() {
  var spreadSheet = SpreadsheetApp.getActiveSheet();
  var dataRange = spreadSheet.getDataRange();
  
  var data = dataRange.getValues();
  for (var i = 1; i< data.length; i++) {
    (function(val) {
      var row = data[i];
      var emailAddress = row[3];
      var message = 'At '+ row[0] + 'You purchased the following:' + '\n\n' + row[4] + '\n' + row[5] + '\n' + row[6] + '\n' + row[7] + '\n' + row[8] + '\n' + row[9] + '\n' + 'Your total cost is $' + row[10];
      var subject = 'Personal Purchase Reciept';
      MailApp.sendEmail(emailAddress, subject, message);
    })(i);
  }
}

我无法每次都删除提交的内容,因为另一项类工作是每周检查我们的在线银行系统中的购买是否已付款,届时提交的内容将被删除。非常感谢任何帮助。

最佳答案

即使同时提交多个表单,此功能也会发送表单提交中数据的电子邮件。如果您希望同时进行多次提交,您应该考虑在函数中使用Lock Service。这不需要对数据表进行任何额外的读取,因为所有这些信息都已经在 formSubmit 事件对象中。

function sendAutomatedEmails(e) {
  let message = 'At ' + e.values[0] + 'You purchased the following:' + '\n\n' + e.values[4] + '\n' + e.values[5]+ '\n' + e.values[6] + '\n' + e.values[7] + '\n' + e.values[8] + '\n' + e.values[9] + '\n' + 'Your total cost is $' + e.values[10];
  MailApp.sendEmail(e.values[3], 'Personal Purchase Receipt', message);
}

function runThisToSetupTrigger() {
  const ss = SpreadsheetApp.getActive();
  if (ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == 'sendAutomatedEmails').length == 0) {
    ScriptApp.newTrigger('SendAutomatedEmails').forSpreadsheet(ss.getId()).onFormSubmit().create();
  }
}

关于google-apps-script - 如何仅向最后一次提交的 Google 表单发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69065508/

相关文章:

google-apps-script - Google 表格的活跃用户与有效用户

javascript - 两个数组索引依次放置时意味着什么?

javascript - 时间戳 onEdit 运行缓慢 - 如何优化?

google-apps-script - 从 Google 电子表格填充 Google 表单响应

google-apps-script - 从应用程序脚本启动 Google 表单

javascript - 谷歌表格 : manipulate DOM element

javascript - 跳至 Google 表单上的页面

google-apps-script - getActiveRange() 和 getSelection() 有什么区别?

javascript - Google表格撤消/重做功能

python - 使用python将google docs公共(public)电子表格下载到csv