Google sheets Google Sheets脚本在单元格中的工作表名称列表中循环

Google sheets Google Sheets脚本在单元格中的工作表名称列表中循环,google-sheets,Google Sheets,我拼凑并修改了下面的脚本,该脚本通过电子邮件将谷歌工作表的内容发送到同一工作表中列出的电子邮件地址。它运行正常,但仅限于按名称列出的工作表I 我似乎无法解决的是循环它,以便从电子表格中的工作表名称列表中提取工作表名称(目前硬编码为“NYC”)。我希望它运行脚本,引用A1中列出的工作表名称,如果A2中列出了一个,那么A3中列出了一个,等等 这可能吗 函数sendmail(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); //var sheet=ss

我拼凑并修改了下面的脚本,该脚本通过电子邮件将谷歌工作表的内容发送到同一工作表中列出的电子邮件地址。它运行正常,但仅限于按名称列出的工作表I

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

这可能吗

函数sendmail(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); //var sheet=ss.getActiveSheet(); var sheet=ss.getSheetByName('NYC'); var range=sheet.getDataRange(); var recipient=sheet.getRange(“A2”).getValue();/“到”电子邮件地址 var subject=“计划于“+Utilities.formatDate”交付的入站装运( sheet.getRange(“B2”).getValue(), ss.getSpreadsheetTimeZone(), “年月日”); var schedRange=sheet.getRange(“A3:Q102”); //var schedRange=sheet.getRange(2,1,sheet.getLastRow(),sheet.getLastColumn()) //首先在电子邮件中输入姓名和日期。 //我们只希望时间表在边界内,所以 //这些是分开处理的。 变量体=“” 正文+=''+''装运到期'+''; 正文+=“” +实用程序。格式化日期( sheet.getRange(“B2”).getValue(), ss.getSpreadsheetTimeZone(), “EEEEE,mmmmmd,yyyy”) + ''; body+=getHtmlTable(schedRange); 身体+=''; 调试器; //recipient='********@gmail.com';//对于调试,只发送给self sendmail(收件人,主题,“需要HTML”{htmlBody:body})
}查看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

    }
var ss=SpreadsheetApp.getActiveSpreadsheet();
函数sendAllEmails(){
var sheet=ss.getSheetByName(“PrimaryDataSHEETname”);
var sheetRange=sheet.getRange(“A1:Z”)
var myRows=getRowData(图纸、图纸范围);
对于(变量i=0;i

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

查看getRowsData()定义中的代码下面是e教程的示例。这将允许您读取工作表的内容一次,这将加快代码的速度。然后您可以在数据中循环并使用列标题检查值。您的代码将发生很大的变化,例如:

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

    }
var ss=SpreadsheetApp.getActiveSpreadsheet();
函数sendAllEmails(){
var sheet=ss.getSheetByName(“PrimaryDataSHEETname”);
var sheetRange=sheet.getRange(“A1:Z”)
var myRows=getRowData(图纸、图纸范围);
对于(变量i=0;i

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

谢谢。我想我不知道这是如何工作的。在上面的原始功能和一些附加功能中,它确实可以抓取表格并通过电子邮件发送,但我无法让它在一系列中循环在电子表格的一列中命名的工作表,但在另一个选项卡上。可能吗?为了更好地回答这个问题,我需要查看您的工作表。它可以是一个包含示例数据的副本。基本上,我的第一个函数将读取工作表名称列,循环它,然后为每个工作表运行第二个函数。我使用的是retRowData()函数,在第一个函数中只调用一次google服务器,在第二个函数的每次迭代中调用一次。然后我循环使用保存在内存中的数据,而不是多次调用该文件。这将大大加快速度。每次使用.getValue()您正在呼叫服务器。我已经复制了一份。@ChrisMcNutt在您的示例文件中的KS copy Email NYC脚本文件中看到了我的代码。我想我看到了您在那里做的事情。但在运行它时,我遇到了错误。正在试着调试。谢谢。我不认为我理解这是如何工作的。在上面的原始文件中,以及一些附加的函数它确实可以抓取表格并通过电子邮件发送给他们,但我无法让它在一系列表格中循环,这些表格在电子表格的一列中命名,但在另一个选项卡上。这可能吗?为了更好地回答这一问题,我需要查看您的表格。它可以是一个包含示例数据的副本。基本上,我的第一个函数是读取工作表名称,循环使用它,并为每个函数运行第二个函数。我使用链接教程中的retRowData()函数,在第一个函数中只调用一次google服务器,在第二个函数的每次迭代中调用一次。然后,我循环使用存储在内存中的数据,而不是使用mult