Код Google Sheets для отправки электронной почты с выбранными ячейками после ввода данных в пустой столбец - PullRequest
2 голосов
/ 23 мая 2019

Попытка создать скрипт Google Sheets, который после ввода значения в пустой столбец (столбец M) должен быть отправлен по электронной почте (адрес электронной почты может быть жестко запрограммирован), содержащий значения ячеек для E3, F3, H3, I3, J3, K3, L3, M3, N3, O3 в электронном письме.

Этот скрипт должен запускаться каждый раз, когда данные вводятся в столбец M

function sendEmail() { 
        // return all data in active spreadsheet
        var values = 
        SpreadsheetApp.getActiveSheet().getDataRange().getValues()
        for (i in values.length) { 
           //iterate over each row
              var data= values[i][14];
              var emailAddress = "someGuy@gmail.com";
              var subject = "Marshal's Notice detected" 
              var message = values[i][E3] [F3] [H3] [I3] [J3] [K3] [L3] [M3] 
                  [N3] [O3];
            // if data cell is greater than one, send an email for this row
               if (data > 1) ;{
                    MailApp.sendEmail(emailAddress, subject, message);
                   }
                 }
       }

1 Ответ

1 голос
/ 24 мая 2019

Использование values[i][E3] не сработает - вам нужно передать целые числа, чтобы получить значения, которые вы ищете в массиве данных. Я сделал несколько изменений в вашем сценарии и объяснил ниже.

function sendEmail() { 
  // return all data in active spreadsheet
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();
  for (var i = 0; i < values.length; i++) { 
    //iterate over each row
    var data = values[i][12];
    var emailAddress = "email@address.com";
    var subject = "Marshal's Notice detected" 
    var message = values[2][4] + values[2][5] + values[2][7]    //e3, f3 & h3
                + values[2][8] + values[2][9] + values[2][10]   //i3, j3 & k3
                + values[2][11] + values[2][12] + values[2][13] //l3, m3 & n3
                + values[2][14];                                //o3
    // if data cell is greater than one, send an email for this row
    if (data > 1 && values[i][15] == '') {
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(i+1, 16).setValue('email sent!');
    }
  }
}

Я изменил ваш цикл for, чтобы он работал для длины значений:

for (var i = 0; i < values.length; i++) { 

Тогда, когда вы пытались получить доступ к E3 и т. Д., Я дал правильные целые числа для доступа к определенным ячейкам, которые вы искали, например, values[2][4], так как они проиндексированы 0, это даст вам ячейку в строке 3 столбец 5 = E3.

Чтобы этот скрипт не отправлял несколько одинаковых писем, я добавил строку, в которой значение столбца P было бы установлено на «Отправлено по электронной почте», а затем добавил проверку в вашем операторе if, чтобы убедиться, что он не имеет уже отправлен в этот ряд.

if (data > 1 && values[i][15] == '') {
  MailApp.sendEmail(emailAddress, subject, message);
  sheet.getRange(i+1, 16).setValue('Email Sent');
}

РЕДАКТИРОВАТЬ ПОСЛЕ ДОПОЛНИТЕЛЬНЫХ КОММЕНТАРИЙ:

Я собрал следующий код, который должен соответствовать всем вашим новым критериям.

function onEdit(e) { 
  // return all data in active spreadsheet
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();
  for (var i = 0; i < values.length; i++) { 
    //iterate over each row
    var editCol = e.range.getColumn();
    var emailAddress = "email@address.com";
    var subject = "Marshal's Notice detected" 
    var message = values[i][4] + values[i][5] + values[i][7]    //e3, f3 & h3
                + values[i][8] + values[i][9] + values[i][10]   //i3, j3 & k3
                + values[i][11] + values[i][12] + values[i][13] //l3, m3 & n3
                + values[i][14];                                //o3
    // if data cell is greater than one, send an email for this row
    if (values[i][13] !== '' && editCol === 13 && values[i][15] === '') {
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(i+1, 16).setValue('email sent!');
    }
  }
}
  1. Код теперь проверяет столбец, в который добавляются данные. Для этого мне пришлось поместить его в триггер onEdit, затем использовать объект события, чтобы получить столбец, в который были введены данные, и проверить это в моем операторе if.
  2. Код захватывал специально строку 3 для данных, теперь он был изменен для использования i, который будет захватывать данные для строки, которую он обрабатывает.
  3. Я также добавил проверку в операторе if, чтобы убедиться, что столбец N заполнен, это должно предотвратить отправку электронных писем, если данные еще не рассчитаны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...