获取Google Emailer脚本以运行一组特定的选项卡



我有一个我想为指定标签运行的电子邮件脚本,还要确保它跳过了具有空白值的所有行,因为当前似乎一旦击中空白,它似乎都会分解行。

我已经成功地构建了用于一个选项卡的脚本,但是一旦我尝试使其用于多个选项卡。

function reminders() {
 var ss = SpreadsheetApp.openById("SHEET-ID");
 var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName(("sheet_1","sheet_2","sheet_3")));
 var editedCell = sheet.getActiveRange().getColumnIndex();
 var dataRange = sheet.getDataRange();
 var data = dataRange.getValues();
 var text1 = 'Insert body of email here';
 for (var i = 1; i < data.length; i++)
   (function(val) {
     var row = data[i];
     var recipient = row[4];
     var name = row[2];
     var replyto = 'reply_to@email.com';
     var body = 'Dear' + ' ' + name + ',' + 'nn' + text1;
     var subject = 'Hello World';
     GmailApp.sendEmail(recipient, subject, body, {from:'reply_to@email.com', replyto:'reply_to@email.com'});
   })(i);
}

这当前适用于Sheep_1,但不适用于Sheet_2或Sheep_3。

有人对我如何改进此脚本以发送到多张纸并跳过空白行有什么建议?

  • 您想使用电子表格" C"one_answers" E"的值发送电子邮件。
  • 您想为" sheet_1"," sheet_2"one_answers" sheet_3"的表名称运行脚本。
  • 您想跳过没有列" C"和/或" E"的值的行。

如果我的理解是正确的,那么这种修改怎么样?

修改点:

  • 似乎在运行var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName(("sheet_1","sheet_2","sheet_3")));时,仅检索" Sheet_3"。
    • 在您的情况下,我认为可能不需要使用setActiveSheet()
  • getSheetByName(("sheet_1","sheet_2","sheet_3"))的参数数量是一个。
    • 当您想使用多个纸时,请在循环中使用每个表名称。
  • var editedCell = sheet.getActiveRange().getColumnIndex();在您的脚本中不使用。
  • (function(val) {val在您的脚本中不使用。
  • 当您要跳过空行时,请在GmailApp.sendEmail()之前放置IF语句。这样,在GmailApp.sendEmail()上删除了该错误。

当以上点反映到您的脚本时,如下所示。请将其视为几个答案之一。

修改后的脚本:

请复制并将以下修改后的脚本粘贴到脚本编辑器中。

function reminders() {
  var sheets = ["sheet_1","sheet_2","sheet_3"]; // Please set the sheet names here.
  var ss = SpreadsheetApp.openById("SHEET-ID");
  for (var s = 0; s < sheets.length; s++) {
    var sheet = ss.getSheetByName(sheets[s]);
    var dataRange = sheet.getDataRange();
    var data = dataRange.getValues();
    var text1 = 'Insert body of email here';
    for (var i = 1; i < data.length; i++) {
      var row = data[i];
      var recipient = row[4];
      var name = row[2];
      if (!recipient || !name) continue; // Here, the empty rows are skipped.
      var replyto = 'reply_to@email.com';
      var body = 'Dear' + ' ' + name + ',' + 'nn' + text1;
      var subject = 'Hello World';
      GmailApp.sendEmail(recipient, subject, body, {from:'reply_to@email.com', replyto:'reply_to@email.com'});
    }
  }
}

注意:

  • 在此修改后的脚本中,当"收件人"或"名称"不存在时,行被跳过。
  • 当您发送大量电子邮件时,请小心"电子邮件读/写"的配额。您可以在这里看到它。

参考:

  • getsheetbyname(name(
  • Google Services的配额

如果我误解了您的问题,这不是您想要的结果,我深表歉意。

相关内容

最新更新