Reputation: 95
I've a google sheet which needs to updated from CSV file, which usually uploaded/modified in the same folder where google sheet exist.
Now, I want to figure out, how to get latest uploaded/modified csv file in the same folder where google sheet exist, which starts from prefix like "CSV_" and update its data in sheet.
I've tried something like this to get the files:-
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssID = ss.getId();
var getParentFile = DriveApp.getFileById(ssID).getParents();
const parFolder = getParentFile.next()
const files = parFolder.getFiles()
}
and this to upload data :-
var file = DriveApp.getFileById('CSV FILE ID HERE');
var data = file.getBlob().getDataAsString();
var lines = data.split("\n");
var data = lines.map(function(lin){return lin.split(",")});
var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var dest = Spreadsheet.getSheets()[0];
dest.clear();
dest.getRange(1, 1, data.length, data[0].length).setValues(data);
}
Thanks
Upvotes: 0
Views: 920
Reputation: 201603
In your situation, how about the following modification?
function myFunction() {
var prefix = "CSV_";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssID = ss.getId();
var getParentFile = DriveApp.getFileById(ssID).getParents();
var parFolder = getParentFile.next();
var files = parFolder.searchFiles(`title contains '${prefix}' and trashed = false`); // OR var files = parFolder.searchFiles(`title contains '${prefix}' and trashed = false and mimeType = '${MimeType.CSV}'`);
var fileList = [];
while (files.hasNext()) {
var file = files.next();
if (file.getName().slice(0, prefix.length) == prefix) {
fileList.push({ id: file.getId(), t: file.getDateCreated() });
};
}
if (fileList.length == 0) return;
var fileId = fileList.sort((a, b) => a.t.getTime() < b.t.getTime() ? 1 : -1)[0].id;
var file = DriveApp.getFileById(fileId);
var data = file.getBlob().getDataAsString();
var csv = Utilities.parseCsv(data);
var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var dest = Spreadsheet.getSheets()[0];
dest.clear();
dest.getRange(1, 1, csv.length, csv[0].length).setValues(csv);
}
CSV_
is retrieved. And, using the retrieved file, your script is run.var csv = Utilities.parseCsv(data)
.Upvotes: 1