简体   繁体   English

如何 append 同一文件夹中的所有电子表格?

[英]How to append all spreadsheets in the same folder?

I am trying to append all spreadsheets from the same folder to a master sheet.我正在尝试将同一文件夹中的所有电子表格 append 到主工作表。

I have found a similar code here but I can append the spreadsheets only when the master sheet is also in the selected folder.我在这里找到了类似的代码,但只有当主工作表也在所选文件夹中时,我才能 append 电子表格。 How could it be modified so that it could be able to applicable to other folders?please advise~怎么修改才能适用于其他文件夹?请指教~

function appendData() {
  var sheet = SpreadsheetApp.getActiveSheet();

  var folder = DriveApp.getFolderById("1UQ5J3xdNnqyHvC-CJ1vAu5YPSxq9Sya9");
  var files = folder.getFiles();
  var cnt=0;
  while (files.hasNext()) {
    var file = files.next();
    cnt++;
    // if the file is not a Sheet, skip it
    if (file.getMimeType() != "application/vnd.google-apps.spreadsheet") {
      continue;
    }

    var importSheet = SpreadsheetApp.openById(file.getId())
    // assuming you only want to append the first sheet of each Spreadsheet:
    var range = importSheet.getSheets()[0].getDataRange();

    // extend the main sheet if you need to:
    try {
      sheet.getRange(1, 1, sheet.getDataRange().getNumRows() + range.getNumRows(), 1);
    }
    catch (e) {
      sheet.insertRowsAfter(sheet.getDataRange().getNumRows(), range.getNumRows() + 1);
    }    
    // remove the headers from the data to copy:    
    range = importSheet.getSheets()[0].getRange(2, 1, range.getNumRows() - 1, range.getNumColumns())

    // copy the data:
    sheet.getRange(sheet.getDataRange().getNumRows() + 1, 1, range.getNumRows(), range.getNumColumns()).setValues(range.getValues());    
  }
}

Try this:尝试这个:

function appendData() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var folder=DriveApp.getFolderById("1UQ5J3xdNnqyHvC-CJ1vAu5YPSxq9Sya9");
  var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  while (files.hasNext()) {
    var file = files.next();
    var importSheet=SpreadsheetApp.openById(file.getId())
    var values=importSheet.getSheets()[0].getDataRange().getValues();
    sheet.getRange(sheet.getLastRow()+1,1,values.length,values[0].length).setValues(values);    
    Logger.log(file.getName());
  }
}

Append both spreadsheets and Excel files to the same master sheet Append 电子表格和 Excel 文件到同一个主表

If you need to append not only sheets from Google spreadsheets, but also form Excel files, you need to convert the latter ones to Google Sheets first.如果您不仅需要 append 来自 Google 电子表格的表格,还需要形成 Excel 文件,则需要先将后者转换为 Google 表格。

For this, you can modify your existing code as following:为此,您可以修改现有代码,如下所示:

function appendData() {
  var sheet = SpreadsheetApp.getActiveSheet();

  var folder = DriveApp.getFolderById("1fUpTphVpYGfLv6SjWxZdbcIK7PHCZOnt");
  var files = folder.getFiles();
  var cnt=0;
  while (files.hasNext()) {
    var file = files.next();
    cnt++;
    // if the file is an excel - convert it to sheet    
    if (file.getMimeType() != "application/vnd.google-apps.spreadsheet") {
      Logger.log(file.getMimeType());
//here is the additional part
//define here mime-types of interest and convert them
      if (file.getMimeType() == "application/vnd.ms-excel" || file.getMimeType() == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") {
        var fileId = file.getId();
        var folderId = folder.getId();
        var blob = file.getBlob();
        var resource = {
          title: file.getName(),
          mimeType: MimeType.GOOGLE_SHEETS,
          parents: [{id: folderId}],
        };      
        var file = Drive.Files.insert(resource, blob);
      }else{
        continue;
      }
    }      
    var importSheet = SpreadsheetApp.openById(file.getId())
    // assuming you only want to append the first sheet of each Spreadsheet:
    var range = importSheet.getSheets()[0].getDataRange();

    // extend the main sheet if you need to:
    try {
      sheet.getRange(1, 1, sheet.getDataRange().getNumRows() + range.getNumRows(), 1);
    }
    catch (e) {
      sheet.insertRowsAfter(sheet.getDataRange().getNumRows(), range.getNumRows() + 1);
    }    
    // remove the headers from the data to copy:  

    range = importSheet.getSheets()[0].getRange(2, 1, range.getNumRows() - 1, range.getNumColumns())
    Logger.log("range.getA1Notation():" + range.getA1Notation());
    // copy the data:
    sheet.getRange(sheet.getDataRange().getNumRows() + 1, 1, range.getNumRows(), range.getNumColumns()).setValues(range.getValues());    
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM