繁体   English   中英

添加新行时自动发送 Email 的 Google 表格脚本

[英]Google Sheets Script to Auto Send Email when New Row Added

我是脚本新手,对代码不是很熟悉,所以我认为这个问题与 StartRow 和 LastRow 有关,但我不确定如何编辑它以按预期工作,一次只从一行中提取数据.

我有以下脚本,是从这个问题中得到的。 当列 H =“Y”且 I <>“Y”时,脚本发送 email。

我遇到的问题是我想要发送一个 email 来通知我每个新用户(1 个新用户 = 1 个新行)被添加到工作表,但很多时候一次添加多个用户/行,因为他们'通过数据连接器重新添加,将 Salesforce 数据连接到工作表,数据连接器每 24 小时刷新一次数据库。

每个单独的 email 都应该包含来自每个单独行的请求、帐户、约会和用户信息——这就是我想要的每个新行

Request: TEST

Account: TEST

Appointment Created Date: Thu Oct 06 2022 00:00:00 GMT-0700 (Pacific Daylight Time)

User: TEST

但是,由于一次添加了多个新行,因此第一行的 email 看起来不错,但第二行的 email 将同时具有自己的行信息和第一行的信息 -这是我不想要的,但目前得到

Request: TEST

Account: TEST

Appointment Created Date: Fri Oct 07 2022 00:00:00 GMT-0700 (Pacific Daylight Time)

User: TEST

Request: TEST

Account: TEST

Appointment Created Date: Thu Oct 06 2022 00:00:00 GMT-0700 (Pacific Daylight Time)

User: TEST

第 3 行的 email 将包含 email 主体中所有 3 行的信息。如何限制每个 email 仅包含与单个行相关的信息?

提前致谢!

       function email()  
       {
    
      //setup function   
      var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("First Time Users");     
      var StartRow = 2; //first row of data to process   
      var LastRow = ActiveSheet.getLastRow();   
      var RowRange = LastRow - StartRow + 1;   
      var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,9);   
      var AllValues = WholeRange.getValues();   
      var message = "" 
      for (var i=0;i<AllValues.length;i++) 
       
        {
          var CurrentRow = AllValues[i];
          var EmailSent = CurrentRow[8]; 
          if (CurrentRow[7] == "Y" && EmailSent!= "Y") 
          {
            message +=                      //set HTML template for information
              "<p><b>Request: </b>" + CurrentRow[0] + "</p>" +
              "<p><b>Account: </b>" + CurrentRow[1] + "</p>" +
              "<p><b>Appointment Created Date: </b>" + CurrentRow[4] + "</p>" +  
              "<p><b>User: </b>" + CurrentRow[5] + "</p>"; 
            var setRow = i + StartRow;
            var SendTo = "testemail@gmail.com";
            var Subject = "First Time User Submitted Ask:  " + CurrentRow[1];    //set subject line   
            //send the actual email  
               MailApp.sendEmail
                      ({
                            to: SendTo,
                            cc: "",
                            subject: Subject,
                            htmlBody: message,
                      });
      
             ActiveSheet.getRange(setRow, 9).setValue("Y");  //update the row if email is sent
          }     
      } 
  }

修改点:

  • 在您的脚本中, var message = ""在循环外部声明。 并且,该值是使用message +=添加的。 在这种情况下, message的值在每个循环中都会增长。 我认为这可能是您遇到问题的原因。
  • 在循环中使用setValue时,处理成本变高。 参考

为了避免这个问题,下面的修改怎么样?

修改脚本:

function email() {
  var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("First Time Users");
  var StartRow = 2;
  var LastRow = ActiveSheet.getLastRow();
  var RowRange = LastRow - StartRow + 1;
  var WholeRange = ActiveSheet.getRange(StartRow, 1, RowRange, 9);
  var AllValues = WholeRange.getValues();
  var ranges = [];
  for (var i = 0; i < AllValues.length; i++) {
    var CurrentRow = AllValues[i];
    var EmailSent = CurrentRow[8];
    if (CurrentRow[7] == "Y" && EmailSent != "Y") {
      var message =
        "<p><b>Request: </b>" + CurrentRow[0] + "</p>" +
        "<p><b>Account: </b>" + CurrentRow[1] + "</p>" +
        "<p><b>Appointment Created Date: </b>" + CurrentRow[4] + "</p>" +
        "<p><b>User: </b>" + CurrentRow[5] + "</p>";
      var setRow = i + StartRow;
      var SendTo = "testemail@gmail.com";
      var Subject = "First Time User Submitted Ask:  " + CurrentRow[1];
      MailApp.sendEmail
        ({
          to: SendTo,
          cc: "",
          subject: Subject,
          htmlBody: message,
        });
      ranges.push("I" + setRow);
    }
  }
  ActiveSheet.getRangeList(ranges).setValue("Y");
}

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM