【问题标题】:Append multiple Google Sheets files into one Google Sheet using App Script使用应用脚本将多个 Google 表格文件附加到一个 Google 表格中
【发布时间】:2020-08-24 14:55:59
【问题描述】:

我在 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-script google-sheets merge google-drive-api


【解决方案1】:

解决方案:

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)

【讨论】:

  • 马里奥斯,感谢您的解决方案。 1)但是,此代码将数据与每张纸的标题列一起附加,这不是必需的。它必须只复制一次标题并跳过所有其他工作表。 2)此外,此代码每次都使用附加数据创建新的 Google 表格文件,名称为“MergedNew”,而不是更新先前创建的文件。它必须使用新的附加数据刷新文件,而不是每次都创建新文件。
  • @SunnyJayadev 检查我更新的答案。我做了你提到的所有改变。如果它回答了您的问题,请接受该解决方案。
  • 只有当名称为“B”的工作表在 Marios 中排在第二位时,此代码才能正常工作,即工作表的顺序。是否可以选择工作表名称,以便它不需要按照工作表的特定顺序排列?此外,在附加来自多个工作表的数据时,它也包括空白行。是否可以跳过空白行?请帮助我对上述代码进行这两项改进。
  • @SunnyJayadev 不幸的是,stackoverflow 不允许跟进问题。请就您的问题发布一个新问题,我将非常乐意为您提供帮助。
猜你喜欢
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
相关资源
最近更新 更多