Ответ:
Вы можете получить данные с помощью 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...
.
Надеюсь, это полезно для вас!
Справочные материалы: