Функция GoogleScript, вызывающая ВСЕ значения по сравнению с только что измененной строкой

Приведенная ниже функция вызывает и отправляет электронное письмо для ВСЕХ строк, помеченных как «Закрытые»; но я хочу, чтобы он отправил по электронной почте только тот, который помечен как «Закрыто»; не старые, ранее закрытые строки и я не знаю как это исправить, помогите пожалуйста.

              function sendEmails() {
           var sheet = SpreadsheetApp.getActiveSheet();
           var startRow = 3;
           var numRows = 5000;
           var dataRange = sheet.getRange(startRow, 1, numRows, 5000);
           var data = dataRange.getValues();
           var FinalMessage;
              for (var i in data) {
              var row = data[i];
              if (row.includes("Closed")){
              // Logger.log("CLOSED" + row);
  
           var emailAddress = ""
           var TSRNumber = row[19];
           var IssueType = row[4];
           var Customer = row[5];
           var TankCode = row[13];
           var City = row[9];
           var State = row[10];
           var Region = row[0];
           var Terminal = row[1];

       switch (Terminal) {
        case "Riga MI":
        emailAddress = "xxxxxx@xxxx.com";
            break;
        case "Other":
        default:
        emailAddress = "xxxx@xxxx.com";
        break;
        }

           var subject = "CLOSED - TSR #" + TSRNumber + " for " + Customer + " in " + City + " " + State                                  
           + " ( " + Region + " )";  
           var message = "TSR # " + TSRNumber + " for " + Customer + " in " + City + " " + State + " ( " 
           + Region + " ) " + "is now Closed" +'\n' +'\n' + "Link to TSR Database: " + 
           "https://xxxxx.com"

          MailApp.sendEmail(emailAddress, "NO-REPLY@xxxxx.com", subject, message); 

      }
  }
}

1 ответ

Для этого сценария вам понадобится устанавливаемый триггер:

      function createTrigger() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ScriptApp.newTrigger('sendEmail').forSpreadsheet(ss).onEdit().create();
}

Эта функция при ручном выполнении создаст триггер для электронной таблицы, который сработает при редактировании ячейки.

Затем сама функция sendEmail будет читать отредактированную ячейку, проверять и заполнять поля как обычно:

      function sendEmail(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  if ((e.range.getRow() >= 3) && (e.range.getValue() === "Closed")) {
       var row = sheet.getRange(e.range.getRow(),1,1,20).getValues();
       var emailAddress = ""
       var TSRNumber = row[19];
       var IssueType = row[4];
       var Customer = row[5];
       var TankCode = row[13];
       var City = row[9];
       var State = row[10];
       var Region = row[0];
       var Terminal = row[1];

       switch (Terminal) {
         case "Riga MI":
           emailAddress = "xxxxxx@xxxx.com";
           break;
         case "Other":
         default:
           emailAddress = "xxxx@xxxx.com";
           break;
       }

       var subject = "CLOSED - TSR #" + TSRNumber + " for " + Customer + " in " + City + " " + State                                  
       + " ( " + Region + " )";  
       var message = "TSR # " + TSRNumber + " for " + Customer + " in " + City + " " + State + " ( " 
       + Region + " ) " + "is now Closed" +'\n' +'\n' + "Link to TSR Database: " + 
       "https://xxxxx.com"

       MailApp.sendEmail(emailAddress, "NO-REPLY@xxxxx.com", subject, message); 
  }
}

Использованная литература:

Устанавливаемые триггеры

Другие вопросы по тегам