【问题标题】:Looping through multiple tabs of multiple google sheets循环浏览多个谷歌表格的多个标签
【发布时间】:2021-09-19 08:00:26
【问题描述】:

我正在努力创建一个基于 google sheet 文档文件夹(目前有 6 个文件)的“master”google sheet。这些工作表中的每一个都有稍微不同数量的选项卡(有些名称略有不同),但我想循环一个公式来获取每个工作表文件中每个选项卡的值。 (例如,fileA 有 3 个选项卡,我想从每个选项卡中获取数据并在具有 4 个选项卡的 fileB 中类似地重复)。我也想跳过一些命名的标签。

这是我的一段代码(2 个交错函数):

function getDataFromSpreadsheet(ssID){

  var ss = SpreadsheetApp.openById(ssID)
  var allsheets = ss.getSheets();

    for(var s in allsheets){
    var sheet = allsheets[s];
    var data = []
      if(
       (sheet.getName() == "Summary") || 
       (sheet.getName() == "Data") || 
       (sheet.getName() == "Sheet1") ||
       (sheet.getName()== "Sheet2")
      ) continue;
      var lastrownum = sheet.getLastRow();
      var values = sheet.getRange("A2:L" + lastrownum).getValues();
      data = data.concat(values)
      Logger.log(data);
      return data;
     }
}

但是,这只是从每个文件中的一个选项卡中获取/保存数据,而不是命名为“摘要”、“数据”等。

如何让它遍历所有工作表文件中的所有(非排除)选项卡???我无法编辑这些文件,因为这是为了创建一个自动化系统。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    解释:

    在 javascript 中使用 for...in 遍历数组不是一个好习惯。如果您想了解更多信息,请参考此article

    但是您的代码中有两个问题:

    1. 你有var data = [] 循环中,每次你重新定义数组,因此之前的值都会被清除。

    2. 您在循环内部使用return 语句,这意味着函数将在第一次迭代中终止,因为返回是每个函数执行的停止点。

    解决方案(推荐):

    我建议你使用forEach:

    function getDataFromSpreadsheet(ssID){
    
      const ss = SpreadsheetApp.openById(ssID)
      const allsheets = ss.getSheets();
      const sheetsToExclude = ["Summary","Data","Sheet1","Sheet2"];
      const data = [];
      allsheets.forEach(sheet=>{ 
        if(!sheetsToExclude.includes(sheet.getName())){
          var lastrownum = sheet.getLastRow();
          var values = sheet.getRange("A2:L" + lastrownum).getValues();
          data = data.concat(values) 
        }
    });
       Logger.log(data);
       return data;
    }
    

    但您的解决方案(在解决问题后)会像这样工作:

    function getDataFromSpreadsheet(ssID){
      var ss = SpreadsheetApp.openById(ssID)
      var allsheets = ss.getSheets();
      var data = []
        for(var s in allsheets){
        var sheet = allsheets[s];        
          if(
           (sheet.getName() == "Summary") || 
           (sheet.getName() == "Data") || 
           (sheet.getName() == "Sheet1") ||
           (sheet.getName()== "Sheet2")
          ) continue;
          var lastrownum = sheet.getLastRow();
          var values = sheet.getRange("A2:L" + lastrownum).getValues();
          data = data.concat(values)          
         }
      Logger.log(data);
      return data;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多