Как добавить все таблицы в одну папку? - PullRequest
0 голосов
/ 07 мая 2020
• 1000 Как его можно изменить так, чтобы его можно было применить к другим папкам? Пожалуйста, сообщите ~
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());    
  }
}

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Добавление электронных таблиц и файлов Excel к одному мастер-листу

Если вам нужно добавить не только листы из электронных таблиц Google, но и сформировать файлы Excel, вам необходимо сначала преобразовать последние в Google Sheets.

Для этого вы можете изменить существующий код следующим образом:

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());    
  }
}
0 голосов
/ 07 мая 2020

Попробуйте следующее:

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