Google Spreadsheet仅在表格的新数据上触发邮件

时间:2013-09-18 16:32:48

标签: google-apps-script

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

我已将触发器设置为在工作表更新时触发。它确实如此,但它也发送电子邮件到telehet中的所有旧电子邮件。因此,例如当我填写表单并将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();

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

1 个答案:

答案 0 :(得分: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);

让我知道这对你有用。