I am trying to append all spreadsheets from the same folder to a master sheet.
I have found a similar code here but I can append the spreadsheets only when the master sheet is also in the selected folder. How could it be modified so that it could be able to applicable to other folders?please advise~
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());
}
}
Try this:
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());
}
}
If you need to append not only sheets from Google spreadsheets, but also form Excel files, you need to convert the latter ones to Google Sheets first.
For this, you can modify your existing code as following:
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());
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.