2015-03-26 3 views
0

Я изо дня в день борется за то, чтобы этот appScript функционировал в моих Google Таблицах. В настоящее время он «застревает» на линии MailApp.sendEmail, особенно на emailAddress. Это дает мне сообщение об ошибке «Недопустимый адрес электронной почты: undefined». Я основывал большинство скриптов на своих Sending Emails from a Spreadsheet Tutorial. Поэтому я не слишком уверен, где это может произойти неправильно.Функция sendEmail в Google Таблицах

Любая помощь очень ценится!

function sendEmails() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh0 = ss.getSheetByName("Candidates Ready for Offer"); 
    var startRow = 2; // First row of data to process 
    var numRows = ss.getSheetByName("Candidates Ready for Offer").getLastRow()-1; 
    // Fetch recent additions 
    var dataRange = ss.getSheetByName("Candidates Ready for Offer").getRange(startRow, 3) 
    // Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
    for (i in data) { 
    var row = data[i]; 
    var emailAddress = row[5]; 
    var message = "row[1]" + "row [2]" + "at" + "row[4]" + "is ready for an offer!" 
    var subject = "Candidate is Ready for Offer"; 
    MailApp.sendEmail(emailAddress, subject, message); 
    } 
} 

ответ

0

Спасибо, что поделились своим листом. На самом деле было несколько причин, по которым он не работал, и я попытаюсь объяснить. Во всяком случае, ваш скрипт на общем листе теперь будет работать так, как вы этого хотите. Вот как это выглядит:

function sendEmails() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sh0 = ss.getSheetByName("Candidates Ready for Offer"); 
var startRow = 4; // First row of data to process 
var numRows = sh0.getLastRow()-startRow+1; 
// Fetch recent additions 
var dataRange = sh0.getRange(startRow,1,numRows,6); 
// Fetch values for each row in the Range. 
var data = dataRange.getValues(); 
Logger.log(data); 
for (i in data) { 
var row = data[i]; 
var emailAddress = row[3]; 
Logger.log(emailAddress); 
var message = "row[1]" + "row [2]" + "at" + "row[4]" + "is ready for an offer!" 
var subject = "Candidate is Ready for Offer"; 
MailApp.sendEmail(emailAddress, subject, message); 
} 
} 
  1. Там нет необходимости продолжать называть один и тот же лист, когда вы уже определили его в качестве переменной sh0
  2. Диапазон данные, включая первые 3 ряда , Вы этого не хотели. Некоторые простые математические данные в var numRows позволяют электронной таблице принимать только диапазон, содержащий данные, начиная с строки 4.
  3. Вы ссылались на неправильный столбец для адреса электронной почты. Он был в колонке 4.

Надеюсь, это поможет/имеет смысл.

Oli

+0

Tthank you! Это определенно помогает! Хотя в настоящее время сценарий вызывает автоматическое электронное письмо для ВСЕХ записей на вкладке и ТОЛЬКО самое последнее дополнение. – TheVivLife

0

Проблема заключается в вашем var dataRange. На данный момент ваш код получает только диапазон одной ячейки (startrow, 3) вместо массива.

Замена .getRange (startrow, 3) с помощью функции getDataRange() должна исправить вашу проблему.

+0

Благодарим за помощь! Теперь я получаю следующее сообщение об ошибке: «Не удалось отправить электронную почту: нет получателя», за исключением того, что у меня есть адреса электронной почты в строке [5]. – TheVivLife

+0

Убедитесь, что вы ссылаетесь на правильную ячейку. Попробуйте напечатать значение в журнале, если строка [5] имеет адрес электронной почты или нет. – KRR

+0

Хорошая идея использовать Logger.log (строка [5]), чтобы увидеть, что его читает. –

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