Google Script 函数调用所有值与刚刚更改的行

GoogleScript function calling ALL values vs the row that was just changed

下面的函数调用所有标记为“已关闭”的行并发送一封电子邮件;但我希望它只通过电子邮件发送标记为“已关闭”的邮件;不是旧的,以前关闭的行,我不知道如何更正这个问题,请帮忙。

        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); 

      }
  }
}

对于这种情况,您需要一个可安装的触发器:

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); 
  }
}

参考文献:

Installable Triggers