1

在脚本上工作以在工作完成后发送电子邮件。我添加了一篇我认为可以防止发送两次电子邮件的文章。很难弄清楚原因。

function sendEmail() 
{
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var numRows = sheet.getLastRow();
  var EMAIL_SENT = "EMAIL_SENT";
  var dataRange = sheet.getRange(startRow, 1, numRows, 3)

  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) 

  {
    var row = data[i];
    var emailAddress = row[1];
    var message = "Correction Completed for " + row[2]; 
    var subject = "Correction Completed";
    var emailSent = row[9];

    if (emailSent != "EMAIL_SENT") //prevent sending duplicate messages
    {
    MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT);

      SpreadsheetApp.flush();  
    }

  }

}

我的想法是将 sendEmail 部分放在 if 语句中,它不会发送。但是,无论如何它仍然会发送电子邮件。先感谢您。

4

2 回答 2

1

你的问题是你的var dataRange = sheet.getRange(startRow, 1, numRows, 3)。尝试更改3为大于9,因为var emailSent = row[9];。阅读时emailSent注意阅读以前的书面状态。

于 2013-03-01T10:44:32.613 回答
0

让我澄清两件事:

  1. 当您使用时,sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT);您确实在第 9 列中写入了 EMAIL-SENT 标签,因为 getRange 使用从 1 开始的列号。
  2. 当您读取数组中的数据(来自工作表范围)时,该数组中的索引从 0 开始,这意味着您应该使用var emailSent = row[8];来获取相应的第 9 个值
  3. (是的,我知道我说了两件事 ;-) 该数组必须至少包含第 9 列,因此您应该使用适当的范围来阅读它:var dataRange = sheet.getRange(startRow, 1, numRows, 9)例如... (但在任何情况下都不少于 9)

希望这足够清楚。

于 2013-03-01T13:24:34.310 回答