从Google doc电子表格发送电子邮件

时间:2013-03-01 08:41:09

标签: javascript email google-apps-script google-sheets

在脚本上工作以在作业完成后发送电子邮件。我添加了一个我认为可以防止两次发送电子邮件的内容。无法弄清楚原因。

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语句中,它不会发送。但是它仍然会发送电子邮件。先感谢您。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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)
  4. 希望这很清楚。