Как добавить все электронные таблицы Google из папки Google? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть основной лист Google и папка Google, содержащая 5-6 листов.

Как добавить все эти 5-6 листов в основной лист с помощью GAS? (Все они с одинаковыми заголовками.), Так что я могу автоматизировать это действие, изменив идентификатор папки.

Я нашел ниже, что может идентифицировать все листы в папке, но не знаю дальнейших шагов. Пожалуйста, помогите.

function listFilesInFolder(folderName) {

var sheet = SpreadsheetApp.getActiveSheet();

//change the folder ID below to reflect your folder's ID (look in the URL when you're in your folder)
var folder = DriveApp.getFolderById("***ID***");
var contents = folder.getFiles();

var cnt = 0;
var file;

while (contents.hasNext()) {
    var file = contents.next();
    cnt++;

1 Ответ

1 голос
/ 23 апреля 2020

Ответ:

Вы можете получить данные с помощью SpreadsheetApp и добавить значения с помощью getRange().setValues().

Пример кода:

Это сделано немного обобщенно, так как я не знаю структуру вашей папки / листов:

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

  var folder = DriveApp.getFolderById("folderId");
  var files = folder.getFiles();

  while (files.hasNext()) {
    var tempFile = "";
    var file = files.next();
    // if the file is not a Sheet, skip it
    if (file.getMimeType() != "application/vnd.google-apps.spreadsheet") {
      tempFile = { 
        "title": file.getName(), 
        "parents": [ {
          "id": folderId
        }] 
      }; 

      file = Drive.Files.insert(tempFile, file.getBlob(), { "convert": true });
    }

    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());
    if (tempFile != "") {
      Drive.Files.Delete(file.getId());
  }
}

Что делает этот код:

  • Получает файлы из указанной папки
  • Преобразует файл в файл электронной таблицы, если это файл Excel.
  • Использует SpreadsheetApp для получения данных листа
  • Проверяет, имеет ли лист для импорта достаточное количество строк. и добавляет необходимые строки, если он не
  • Удаляет заголовки из данных для импорта, чтобы они не дублировались
  • Копирует данные
  • Удаляет временный файл, если это был файл Excel

Обязательно включите Advanced Drive Service из пункта меню Resoueces > Advanced Google services....

Надеюсь, это полезно для вас!

Справочные материалы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...