2013-03-01 142 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