0

好的,所以我使用这个脚本: https ://developers.google.com/apps-script/articles/mail_merge

而且我已将触发器设置为在工作表更新时触发。它确实如此,但随后它也会向电子表格中的所有旧电子邮件发送电子邮件。因此,例如,当我填写表格并将 user1 放入电子邮件地址时,它只会向 user1 发送电子邮件。当我再次填写表格时,我填写了 user2,然后用户 1 和 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();

它什么也没发送,我做错什么了吗=)?

4

1 回答 1

0

我相信答案在于 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);

让我知道这对你有什么影响。

于 2013-09-19T02:06:32.793 回答