簡體   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