2014-12-19 3 views
0

Я пытаюсь запустить скрипт на листе Google, чтобы отправить электронное письмо, только если определенный столбец не равен «y». Если это правда, то я хочу, чтобы он отправил электронное письмо, а затем положил «y» в столбце, чтобы предотвратить отправку дубликата. Это не работает, хотя я продолжаю получать повторяющиеся электронные письма. Вот код:google script для отправки условной электронной почты

function sendEmails() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var startRow = 2; // First row of data to process 
    var numRows = 600; // Number of rows to process 
    // Fetch the range of cells A2:B3 
    var dataRange = sheet.getRange(startRow, 1, numRows, 600) 
    //Fetch values for each row in the Range. 
    var data = dataRange.getValues(); 
    for (i in data) { 
    var row = data[i]; 
    if (row[19]!= 'y') { 
     var emailAddress = "[email protected]"; // First column 
     var message = "A new trip request has been submitted. Here's what you need to know. Trip #: " + row[1] + " " + row[4] + " to:" + 
row[10] + " Depart Date: " + row[8];  // Second column 
     var subject = "New Trip Request " + row[1]; 
     MailApp.sendEmail(emailAddress, subject, message); 
     sheet.getRange(i+2,19).setValue('y'); 
    } 
    } 
} 
+1

Существует вероятность, что вы ссылаетесь на неправильный номер столбца в этой строке кода «if (row [19]! = 'Y') {'. – KRR

+0

Он заменил заголовок столбца на y в столбце 19, но я думаю, что исправил это. Поэтому я почти уверен, что 19 правильный. –

+0

Кстати, я запустил ваш код один раз, и он превысил количество писем, которые моя учетная запись могла отправить за один день после одного исполнения вашего кода. Он пытается отправить что-то вроде 600 писем, потому что цикл 'FOR' оценивается как true на каждой итерации. –

ответ

0

условие проверки на "у" значение имеет жёстко значение:

if (row[19]!= 'y') { 

Заменить 19 с "я"

if (row[i]!= 'y') { 
+0

Можете ли вы помочь мне понять, что это будет делать? Столбец 19 - это столбец, в котором я хочу, чтобы он заглядывал. –

+0

Переменная 'row' принимает двумерный массив значений, когда он сначала инициализируется. [Documentation - getValues ​​()] (https://developers.google.com/apps-script/reference/spreadsheet/range#getValues ​​()) Итак, ваша переменная 'row' по умолчанию является переменной типа массива. Сначала он индексируется ROW! См. Документацию. Поэтому, когда вы жестко кодируете номер 19, он не проверяет, какие данные были в столбце 19, он проверяет, какие данные были в строке 20 на каждой итерации цикла FOR. Он нулевым индексом начинается с [0] [0]. Таким образом, строка 1 является индексом нуля. –

+0

Что-то я не могу получить здесь. var Data - это 2-й массив, затем, когда цикл начинается, строка var - это данные [i]: так что 1d-массив со значениями каждой строки. Затем, если вы хотите проверить столбец 19 для определенного значения, почему бы не сделать (если строка [18] = 'y') верна? – JPV

0

Как KRR уже если вы хотите проверить col19 вашей таблицы, в вашем (нуль-индексированном) 2d-массиве, возвращаемом .getValues ​​(), вам придется использовать:

if (row[18]!= 'y') { 

Эта линия:

sheet.getRange(i+2,19).setValue('y'); 

устанавливает 'у' в колонке 19 таблицы. Я предполагаю, что это правильно?

+0

У меня уже было одно и то же условие в другом разделе сценария, поэтому я переместил эту часть отправки электронной почты под этим и получил результат, который я хотел. –

+0

Электронная таблица собирает ответы на формы - запросы на транспортировку. Когда запрос приходит, лист ставит запрос на транспортный календарь и отправляет электронное письмо сотрудникам офиса (пока запрос не пришел от одного из нас). После поездки расходы заносятся в лист, и запрос электронной почты отправляется запрашивающему лицу (опять же, только если запрос не является одним из нас). Учитывая, что я даже не знал, что сценарий был до этой недели, я очень рад, что смог собрать это вместе. Большое спасибо сообществу stackoverflow. –