2013-03-01 3 views
1

Работа над скриптом для отправки электронной почты, когда задание завершено. Я добавил в кусок, который, как я думал, будет препятствовать отправке по электронной почте дважды. Не понимаю, почему.Отправка электронной почты из электронной таблицы google doc

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). Попробуйте изменить 3 на что-то большее, чем 9, из-за var emailSent = row[9];. Когда вы читаете emailSent, обратите внимание на предыдущий записанный статус.

0

Позвольте мне прояснить 2 вещи:

  1. При использовании sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT); вы действительно писать EMAIL-SENT метку в колонке 9, поскольку getRange работает с номерами столбцов, начиная с 1.
  2. Когда лет чтения данных массив (который поступает из диапазона листов) индекс в этом массиве начинается с 0, это означает, что вы должны использовать var emailSent = row[8];, чтобы получить соответствующее 9-ое значение
  3. (да, я знаю, я сказал 2 вещи ;-) Массив должен по крайней мере содержать этот 9-й столбец, чтобы вы пакетирования прочитать его, используя соответствующий диапазон: var dataRange = sheet.getRange(startRow, 1, numRows, 9), например ... (но не менее 9 в любом случае)

Надеясь это достаточно ясно.

+0

Да. Это сработало для меня. Спасибо! – user2122765

Смежные вопросы