将140张单独的Google表格合并为一张

时间:2016-02-19 09:16:24

标签: google-apps-script merge google-sheets

我有140张单独的纸张,并计算合并为一张单独的纸张。通常的importrange或数组等对于我必须合并的工作表数量来说太多了。

每张纸上的标题行是相同的,所以我只需要将第3行以后的每张纸中的所有数据复制到新的主页中。每个数据量都是可变的。我不介意复制包括标题在内的所有内容,因为我可以使用过滤器手动删除它们。

我找到了这个代码(https://ctrlq.org/code/19980-merge-google-spreadsheets),我在参数列表之后运行并且我一直收到错误 - 缺失。 (第4行,文件“代码”)

我将SOURCE设置为文件夹键,其中保留了我要合并的所有文件。我是编写脚本的新手:

function mergeSheets() {

  /* Retrieve the desired folder */
  var myFolder = DriveApp.getFoldersByName(SOURCE).next();

  /* Get all spreadsheets that resided on that folder */
  var spreadSheets = myFolder.getFilesByType("application/vnd.google-apps.spreadsheet");

  /* Create the new spreadsheet that you store other sheets */  
  var newSpreadSheet = SpreadsheetApp.create("Merged Sheets");

  /* Iterate over the spreadsheets over the folder */
  while(spreadSheets.hasNext()) {

    var sheet = spreadSheets.next();

    /* Open the spreadsheet */
    var spreadSheet = SpreadsheetApp.openById(sheet.getId());

    /* Get all its sheets */
    for(var y in spreadSheet.getSheets()) {

      /* Copy the sheet to the new merged Spread Sheet */
      spreadSheet.getSheets()[y].copyTo(newSpreadSheet); 
    }
  }      
}

有人能告诉我这个错误是什么意思吗?我没有错过任何一个)。我怀疑问题是我如何定义SOURCE?

由于

1 个答案:

答案 0 :(得分:0)

尝试这样的第一部分,并尝试从这里弄清楚。

var folder= DriveApp.getFolderById('Your_folderID');
var files = folder.getFilesByType(MimeType.GOOGLE_SHEETS);//this is the right getFilesByType string
     while (files.hasNext()) {
       var sheet = SpreadsheetApp.open(files.next());
       var spreadSheet = SpreadsheetApp.openById(sheet.getId());
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var newSpreadSheet = ss.getActiveSheet();

它只是一张140张的电子表格,还是多张电子表格分成的?当你说copyTo时,你可能也想设置一个范围。

之类的东西
for(var y in spreadSheet.getSheets()) {

  var Allsheets = spreadSheet.getSheets[y]();
  var data = Allsheets.getDataRange().getValues();{
            var target = new Array();
            for(n=0;n<data.length;++n){
                target.push(data[n]);
        }
    }
    newSpreadsheet.getRange(2,1,target.length,target[0].length).setValues(target);
 }