首页 > 解决方案 > 使用 App Script 将多个 Google 表格文件附加到一个 Google 表格中

问题描述

我在 Google Drive 的一个文件夹中有 100 个 Google Sheet 文件。每个 Google 工作表文件有 10 个工作表(A、B、C、D、E、F、G、H、I、J)。我想将所有 100 个 Google 表格文件附加到一个 Google 表格中,并从所有 100 个文件的“B”表格中附加数据。所有工作表都有相同的列。我试过下面的代码。但它会将 100 个文件中的所有“B”表拉到一张 Google 表中,但不会将表中的数据附加到一张中。

function myFunction() 
{
  var myFolder = DriveApp.getFolderById("1ZtxfMNDn3uFhCcdcp5unfmTwUIJ_3fZK");
  var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet");
  var newSpreadSheet = SpreadsheetApp.create("MergedNew");
  while(spreadSheets.hasNext()) 
  {
    var sheet = spreadSheets.next();
    var spreadSheet = SpreadsheetApp.openById(sheet.getId());
    for(var y in spreadSheet.getSheets()) 
    {
      spreadSheet.getSheets()[y].copyTo(newSpreadSheet); 
     }
  }      
}

标签: google-apps-scriptgoogle-sheetsmergegoogle-drive-api

解决方案


解决方案:

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);
  }      
}

解释:

  • 我们遍历指定的特定文件夹中的所有电子表格文件folderId
  • 该脚本将创建一个名为 的新电子表格 MergedNew。如果后者存在,那么它只会得到 现有的。此电子表格将包含上一步指定文件夹中所有电子表格文件的 B 表的所有数据。
  • 然后它将每个 B 表的数据附加B dataMergedNew.
  • 只有在您第一次运行脚本时,标头才会被复制到主文件中。

我在这里假设var sh = spreadSheet.getSheets()[1];每个文件中的工作表 B 位于第二个位置。即,(A,B,C,D,E,F,G,H,I,J)


推荐阅读