繁体   English   中英

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

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

我正在尝试将同一文件夹中的所有电子表格 append 到主工作表。

我在这里找到了类似的代码,但只有当主工作表也在所选文件夹中时,我才能 append 电子表格。 怎么修改才能适用于其他文件夹?请指教~

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

尝试这个:

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 电子表格和 Excel 文件到同一个主表

如果您不仅需要 append 来自 Google 电子表格的表格,还需要形成 Excel 文件,则需要先将后者转换为 Google 表格。

为此,您可以修改现有代码,如下所示:

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