2013-03-01 177 views
1

在作业完成时对作业发送电子邮件。我添加了一个我认为会阻止两次电子邮件的部分。无法找出原因。从Google文档电子表格发送电子邮件

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语句中,它不会发送。不过,它仍然会发送一封电子邮件。先谢谢你。

回答

1

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

0

让我澄清两两件事:

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

希望这是不够清楚。

+0

是的。这对我有效。谢谢! – user2122765 2013-03-01 15:52:54

相关问题