Как отладить, почему скрипт Google не считывает информацию из строк? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь написать сценарий для отправки данных учетной записи сотрудников по электронной почте после их приема на работу. Наконец, сценарий отправляет электронное письмо. и не отправляет дубликаты. Однако он не считывает информацию в каждой строке должным образом. Понятия не имею, что происходит. Я также действительно потерялся в строке

sheet.getRange(startRow + i-18,1).setValue(EMAIL_SENT);

внизу и почему мне пришлось поставить -18, чтобы EMAIL_SENT записался в правильную строку на листе.

Вот сценарий:

var EMAIL_SENT = 'EMAIL_SENT';

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();

  var startRow = 2; // First row of data to process

  var numRows = 55; // Number of rows to process



  var dataRange = sheet.getRange(startRow, 1, numRows, 9);


  // Fetch values for each row in the Range.

  var data = dataRange.getValues();

  var subject = "MCS Account Info";

    for (i in data) {
 //  clear variables between loops    
      var email1 = "";

      var ccs = "";

      var message = "";

      var row = data[i];

      var email1 = row[4];
      if(row[4] !== "") var ccs = row[4];
      if(row[5] !== "") var ccs = ccs + ", " + row[5];
      if(row[6] !== "") var ccs = ccs + ", " + row[6];
      if(row[7] !== "") var ccs = ccs + ", " + row[7];

      var message = row[8]; 
 // just so I can see what is in each variable will be removed when working    
      Logger.log("email - ",row[3],"subject - ",subject,"message - ",message,"bcc - ",ccs);

      if (row[0] !== EMAIL_SENT) {
        if(row[2] !== "") {
          MailApp.sendEmail(row[3], subject, message, {
            bcc: ccs
          });
          sheet.getRange(startRow + i-18,1).setValue(EMAIL_SENT);
          SpreadsheetApp.flush();
        }
      }
    }
}

и ссылка на тестовый лист, который я использую: https://docs.google.com/spreadsheets/d/1CzrMlsgwvkzp_w4IjZcOkSl7rU9T8qnBYBYi2luwWkg/edit?usp=sharing

Если ссылка не работает, это лист с 9 столбцами.

A - EMAIL_SENT message
B - # to look up info from another sheet
C - Username
D - User's Email address
E - H Additional Email Addresses for BCC
G - Message to send

В течение года на листе будет несколько сотен записей. Я смотрю на первые 56 строк, хотя в моем листе всего 2 записи.

1 Ответ

1 голос
/ 08 мая 2020

Попробуйте следующее:

function sendEmails() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var startRow=2; 
  var numRows=55; 
  var dataRange=sheet.getRange(startRow,1,numRows,9);
  var data=dataRange.getValues();
  var subject="MCS Account Info";
  for (var i=0;i<data.length;i++) {
    var ccs="";
    var row=data[i];
    var email1=row[4];
    if(row[4]!="") var ccs=row[4];
    if(row[5]!="") var ccs=ccs + ", " + row[5];
    if(row[6]!="") var ccs=ccs + ", " + row[6];
    if(row[7]!="") var ccs=ccs + ", " + row[7];
    var message=row[8]; 
    if (row[0]!='EMAIL_SENT' && row[2]!="") {
      MailApp.sendEmail(row[3], subject, message, {bcc: ccs});
      sheet.getRange(i+startRow,1).setValue('EMAIL_SENT');
    }
  }
}
...