【问题标题】:Append multiple Google Sheets files into one Google Sheet using App Script having same sheet name but in different order of sheets使用具有相同工作表名称但工作表顺序不同的应用脚本将多个 Google 工作表文件附加到一个 Google 工作表中
【发布时间】:2021-01-03 01:17:05
【问题描述】:

我在 Google Drive 的一个文件夹中有 100 个 Google Sheet 文件。每个 Google 工作表文件有 10 个工作表 (A,B,C,D,E,F,G,H,I,J)。我想将所有 100 个 Google 表格文件附加到一个 Google 表格中,并从所有 100 个文件的“B”表格中附加数据。但是名称为“B”的床单不会总是排在第二位。所有工作表都有相同的列。我有以下代码,仅当这些工作表在每张工作表中的顺序中排在第二位时,才从多个文件中附加工作表。 1)它必须选择工作表名称而不是第二张工作表 2)此代码甚至包括工作表中的空白行(如果有)。它必须跳过工作表中的空白行。

function myFunction() {

  var myFolder = DriveApp.getFolderById("1ZtxfMNDn3uFhCcdcp5unfmTwUIJ_3fZK");
  var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet");
  
  var master_files = DriveApp.getFilesByName("MergedNew")
      
  if (master_files.hasNext()){
     var master_file=master_files.next();
     var newSpreadSheet = SpreadsheetApp.openById(master_file.getId());
     }
  else { 
    var newSpreadSheet = SpreadsheetApp.create("MergedNew");
    newSpreadSheet.getSheets()[0].setName('B data');
  }
  
  var bSheet = newSpreadSheet.getSheetByName('B data');
  while(spreadSheets.hasNext()) 
  {
    var sheet = spreadSheets.next();
    var spreadSheet = SpreadsheetApp.openById(sheet.getId());
    var sh = spreadSheet.getSheets()[1];
    var data = sh.getRange(2,1,sh.getMaxRows(),sh.getMaxColumns()).getValues();
    
    if (bSheet.getLastRow() == 0){
      var headers = sh.getRange(1,1,1,sh.getMaxColumns()).getValues();
      bSheet.getRange(1,1,1,sh.getMaxColumns()).setValues(headers);
    }
    
    bSheet.getRange(bSheet.getLastRow()+1,1,data.length,data[0].length).setValues(data);
  }      
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    解释:

    但名称为“B”的工作表不会总是排在第二位

    然后替换这个:

    var sh = spreadSheet.getSheets()[1];
    

    与:

    var sh = spreadSheet.getSheetByName('B');
    

    或:

    var sh = spreadSheet.getSheetByName('B data');
    

    取决于您如何命名 B 表。


    它必须跳过工作表中的空白行

    然后你可以过滤掉空白行如下:

    var filtered_data = data.filter(function (row) {
        return row[0] != ""; //
      }); 
    

    解决方案:

    function myFunction() {
    
      var myFolder = DriveApp.getFolderById("1ZtxfMNDn3uFhCcdcp5unfmTwUIJ_3fZK");
      var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet");
      
      var master_files = DriveApp.getFilesByName("MergedNew")
          
      if (master_files.hasNext()){
         var master_file=master_files.next();
         var newSpreadSheet = SpreadsheetApp.openById(master_file.getId());
         }
      else { 
        var newSpreadSheet = SpreadsheetApp.create("MergedNew");
        newSpreadSheet.getSheets()[0].setName('B data');
      }
      
      var bSheet = newSpreadSheet.getSheetByName('B data');
      while(spreadSheets.hasNext()) 
      {
        var sheet = spreadSheets.next();
        var spreadSheet = SpreadsheetApp.openById(sheet.getId());
        var sh = spreadSheet.getSheetByName('B');
        var data = sh.getRange(2,1,sh.getMaxRows(),sh.getMaxColumns()).getValues();
        
        var filtered_data = data.filter(function (row) {
        return row[0] != ""; //
      }); 
        
        if (bSheet.getLastRow() == 0){
          var headers = sh.getRange(1,1,1,sh.getMaxColumns()).getValues();
          bSheet.getRange(1,1,1,sh.getMaxColumns()).setValues(headers);
        }
        
        bSheet.getRange(bSheet.getLastRow()+1,1,filtered_data.length,filtered_data[0].length).setValues(filtered_data);
      }      
    }
    

    【讨论】:

      【解决方案2】:

      选择表 B,而不是第二张:

      为了检索具有特定名称而不是特定索引的工作表,您需要使用getSheetByName(name) 而不是getSheets()。替换这个:

      var sh = spreadSheet.getSheets()[1];
      

      有了这个:

      var sh = spreadSheet.getSheetByName("{your_sheet_name}");
      

      删除空白行:

      您不想将空白行复制到新工作表,因此您应该从源 data 中过滤掉它们。您可以为此使用filtersome(或every)。在从源表中检索 data 后添加此行:

      data = data.filter(row => row.some(value => value != ""));
      

      【讨论】:

        猜你喜欢
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        • 1970-01-01
        • 2023-01-27
        • 1970-01-01
        • 2019-12-19
        • 1970-01-01
        相关资源
        最近更新 更多