如何识别Google云端硬盘文件夹中的最新文件

问题描述:

我在Google云端硬盘中有一个文件夹,文件通常从报告工具转储到哪个文件夹中。这些文件采用.xls格式。它们都具有相同的名称,我想识别最新的文件,以便我可以将数据导入到Google工作表中。如何识别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); 
}; 

你是不是从解决方案很远......我试图用一个稍微不同的方法:我存储在一个二维数组的所有日期和ID,我数组进行排序和检索的第一个元素(排序后)在第二维中返回文件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; 
}; 
+0

非常感谢该哔叽。我很高兴看到我在概念上朝着正确的方向前进(可怜的执行)。 关于如何向现有代码添加一些功能以将最新ID与现有ID进行比较并删除不匹配的ID,您是否有任何想法?我知道如何去摧毁他们,我只是不知道我会怎么做比较。 – 2014-09-24 07:37:25

+0

我会稍后再编辑,现在不行。 – 2014-09-24 08:01:48

的上面贴出的答案对我来说不起作用,所以我想出了我自己的解决方案,它的工作原理。

显然(2017年底)谷歌驱动器排序文件。所以最后创建的文件是迭代器中的第一个。

下面的代码,以获取最新的文件ID:

function getLatestFileId(){ 

    var folder = DriveApp.getFoldersByName("Aff Comm"); 
    var files = folder.next().getFiles(); 
    var lastFileId = files.next().getId(); 


    return lastFileId.toString(); 

}