我在Google云端硬盘中有一个文件夹,通常会从报告工具中转储哪些文件。文件格式为.xls。它们都具有相同的名称,我想识别最新的文件,以便我可以将数据导入到Google表格中。
正如您将从下面所述,我是Google Apps脚本的新用户。我一直在尝试将文件迭代器中的各种文件捕获到一个数组中,以便在结果上运行Math.max函数,最终得到一个值。当然,一旦我确定了最新的日期,我还需要返回与之关联的文件ID - 但我还没有达到目的。我可能正朝着完全错误的方向前进,所以任何提示/指导都会非常感激。
function listLatestFile(id) {
var folder = DriveApp.getFoldersByName("GmailAttachments");
var files = DriveApp.getFilesByName('mrp_out.xlsx');
while (files.hasNext()) {
var file = files.next();
var date = (1 - file.getDateCreated());
var datediff = new Array(date);
var datelast = Math.max(datediff);
Logger.log(datelast);
}
//Logger.log(date);
};
答案 0 :(得分:0)
你离解决方案不是很远......我尝试使用稍微不同的方法:我将所有日期和ID存储在2D数组中,我对数组进行排序并检索第二个维度中的第一个元素(排序后)返回文件ID。
代码:
function listLatestFile() {
var folder = DriveApp.getFoldersByName("GmailAttachments");
var files = DriveApp.getFilesByName('mrp_out.xlsx');
var result = [];
while (files.hasNext()) {
var file = files.next();
result.push([file.getDateCreated(),file.getId()]);
}
Logger.log(result);
var id = result.sort()[0][1];
Logger.log(id);
return id;// return most recent file ID
};
编辑:如果您希望对排序方法有更多控制权,可以使用更多"复杂的"排序方法如下:
...// same as above
result.sort(function(x,y){
var xp = x[0];// get first element in inner array
var yp = y[0];
return xp == yp ? 0 : xp < yp ? -1 : 1;// choose the sort order
});
var id = result[0][1];
Logger.log(id);
return id;
};
答案 1 :(得分:0)
上面发布的答案对我没有用,所以我提出了自己的解决方案,该方案有效。
显然(2017年末 )google驱动器会对文件进行排序。所以最后创建的文件是迭代器中的第一个。
这是获取最新文件ID的代码:
function getLatestFileId(){
var folder = DriveApp.getFoldersByName("Aff Comm");
var files = folder.next().getFiles();
var lastFileId = files.next().getId();
return lastFileId.toString();
}