2014-09-23 133 views
0

我在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); 
}; 

回答

0

你是不是從解決方案很遠......我試圖用一個稍微不同的方法:我存儲在一個二維數組的所有日期和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

0

的上面貼出的答案對我來說不起作用,所以我想出了我自己的解決方案,它的工作原理。

顯然(2017年底)谷歌驅動器排序文件。所以最後創建的文件是迭代器中的第一個。

下面的代碼,以獲取最新的文件ID:

function getLatestFileId(){ 

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


    return lastFileId.toString(); 

} 
相關問題