Google表格脚本循环遍历单元格中的工作表名称列表

时间:2017-01-24 19:57:39

标签: google-sheets

我拼凑在一起并修改了以下脚本,该脚本将Google表格的内容通过电子邮件发送到同一张表格中列出的电子邮件地址。它运行正常但仅限于我按名称列出的表单。

我似乎无法解决的问题是循环播放,以便从电子表格中的工作表名称列表中提取工作表名称(当前硬编码为" NYC")。我希望它能够运行引用A1中列出的工作表名称的脚本,然后如果列出了一个A2,那么如果列出了一个,则为A3,等等。

这可能吗?



function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
//  var sheet = ss.getActiveSheet();
  var sheet = ss.getSheetByName('NYC');
  var range = sheet.getDataRange();
  var recipient = sheet.getRange("A2").getValue(); // "TO" email address
  var subject = "Inbound Shipments Scheduled for Delivery On " + Utilities.formatDate(
                  sheet.getRange("B2").getValue(),
                  ss.getSpreadsheetTimeZone(),
                  "MM/dd/yy");
  var schedRange = sheet.getRange("A3:Q102");
  // var schedRange = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn())


  // Put Name & Date into email first.
  // We only want the schedule within borders, so
  // these are handled separately.
  var body = '<div style="text-align:center;display: inline-block;font-family: arial,sans,sans-serif">'
  body += '<H1>'+ 'Shipments Due ' +'</H1>';
  body += '<H2>'
        + Utilities.formatDate(
            sheet.getRange("B2").getValue(),
            ss.getSpreadsheetTimeZone(),
            "EEEEE, MMMMM d, yyyy")
        + '</H2>';
  body += getHtmlTable(schedRange);
  body += '</div>';
  debugger;

  // recipient = '*********@gmail.com';  // For debugging, send only to self
  MailApp.sendEmail(recipient, subject, "Requires HTML", {htmlBody:body})
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

Tutorial: Simple Mail Merg e教程的示例中查看getRowsData()定义中的代码。这将允许您一次读取工作表的内容,这将加快您的代码。然后,您可以遍历数据并使用列标题来检查值。你的代码会发生很大变化,比如:

var ss = SpreadsheetApp.getActiveSpreadsheet();

    function sendAllEmails() {
      var sheet = ss.getSheetByName("PrimaryDataSHEETname");
      var sheetRange = sheet.getRange("A1:Z")
      var myRows = getRowData(sheet, sheetRange);

      for (var i=0; i < myRows.length; ++i){
        if(typeof(myRows[i].Sheet1) !== 'undefined'){ 
           sendIndividualEmail(myRows[i].Sheet1);
      }

        if(typeof(myRows[i].Sheet2) !== 'undefined'){ 
           sendIndividualEmail(myRows[i].Sheet2);
      }
    }

    function sendIndividualEmail(sheetName) {
      var sheet = ss.getSheetByName(sheetName);
      //Grab necessary data from tehis sheet and send emails

    }

您可以将第一张表格中的其他信息传递给创建电子邮件的功能,例如收件人,主题等。