Google apps script 谷歌电子表格仅在工作表中的新数据上触发邮件

Google apps script 谷歌电子表格仅在工作表中的新数据上触发邮件,google-apps-script,Google Apps Script,好的,我使用这个脚本: 我已经将触发器设置为在工作表更新时触发。确实如此,但它也会向电子表格中的所有旧电子邮件发送电子邮件。例如,当我填写表单并将user1放入电子邮件地址时,它只会向user1发送电子邮件。当我再次填写表单时,我填写user2,然后user1和user2都收到电子邮件,我只希望user2收到电子邮件 如果我第三次填写表格,我只希望它向user3发送电子邮件 下面是我的函数的外观: function sendEmails() { var ss = SpreadsheetA

好的,我使用这个脚本:

我已经将触发器设置为在工作表更新时触发。确实如此,但它也会向电子表格中的所有旧电子邮件发送电子邮件。例如,当我填写表单并将user1放入电子邮件地址时,它只会向user1发送电子邮件。当我再次填写表单时,我填写user2,然后user1和user2都收到电子邮件,我只希望user2收到电子邮件

如果我第三次填写表格,我只希望它向user3发送电子邮件

下面是我的函数的外观:

 function sendEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheets()[0];
  var dataRange = dataSheet.getRange(2, 1, dataSheet.getMaxRows() - 1, 4);

  var templateSheet = ss.getSheets()[1];
  var emailTemplate = templateSheet.getRange("A1").getValue();
我试试这个:

  function sendEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheets()[0];
  var lastRow = dataSheet.getMaxRows() - 1;
  var dataRange = dataSheet.getRange(lastRow, 1, lastRow, 4);

  var templateSheet = ss.getSheets()[1];
  var emailTemplate = templateSheet.getRange("A1").getValue();

它什么也不发送,我做错了什么吗?

我相信答案在于SendEmails方法,它会在表单中的整个条目列表中找到答案,向每个条目发送邮件。要仅向最后一个在表单中输入信息的人发送电子邮件,您需要修改该功能

您有许多选项,可以将输入范围更改为仅最后一行,例如:

var lastRow = dataSheet.getLastRow();
var dataRange = dataSheet.getRange(lastRow, 1, lastRow, 4);
这应该可以很好地工作,第二,你可以删除循环,现在只运行一次,但我建议你可以暂时保留它,以防你想在以后使用工作表中的菜单向整个列表发送电子邮件

进一步扩展,您可以在函数SendMails(onlyLast)中有一个布尔参数,它可以为您进行切换,这样您就拥有了这两个方面的优势

function sendEmails(onlyLast) {
...
var startRow = 2;
var endRow = dataSheet.getLastRow() - 1;
if (onlyLast)
  startRow = endRow;
var dataRange = dataSheet.getRange(startRow, 1, endRow, 4);
让我知道这对您有何影响。

可能的重复项请同时查看以下问题:。有很多发送电子邮件的表单提交触发函数示例。