2013-12-17 34 views
0

問題: - 我需要從某些Google雲端硬盤文件夾中獲取最新創建文檔的名稱和ID。GAS Loop無限期

解決方案: - 我無法找到一個簡單的方法來獲取它,因此,創建了一個文件夾內的文件的循環獲取最大日期 - 然後循環再次在文件夾中匹配日期和記錄名稱和日期 - 下面的代碼(如上所述評論時)適用於解決方案。

而不是用一個不同的文件夾名稱重寫整個代碼,我試着創建一個文件夾名稱的循環。

但是,應用程序腳本進入無限循環,發出最大執行時間限制消息。 任何幫助表示讚賞。

function Get_lastestdate() { 

    //Define Spreadsheet and sheet 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("PEOPLE"); 

    //comment from here to work properly 
    for (var i =1; i < 4; i++) { 

    if (i = 1) { var foldername = "Folder1"} 
    if (i = 2) { var foldername = "Folder2"} 
    if (i = 3) { var foldername = "Folder3"} 
    // till here 

    //Define folder and files 
    var folder = DocsList.getFolder(foldername); //set folder name in case commenting. 
    var lastfile = folder.getFiles(); 

    //Make a blank array 
    var noofdaysarray = [] 
    var yeararray = [] 

    //Loop to get all No of days in a year & the year 
    for (var i in lastfile) { 
    noofdaysarray.push(Utilities.formatDate(lastfile[i].getDateCreated(),"GMT","D")); 
    yeararray.push(Utilities.formatDate(lastfile[i].getDateCreated(),"GMT","y")); 
    } 

    //Get the max date from date and year 
    var largestdate = Math.max.apply(Math, noofdaysarray); 
    var largestyear = Math.max.apply(Math, yeararray); 
    //Get maximum available date 
    var matchcriteria = largestdate + largestyear 

    //Again loop for matching criteria with the actual date uploaded 
    for (var i in lastfile) { 
    var lastdate = Utilities.formatDate(lastfile[i].getDateCreated(),"GMT","D"); 
    var lastyear = Utilities.formatDate(lastfile[i].getDateCreated(),"GMT","y"); 
    var wholedate = parseInt(lastdate) + parseInt(lastyear); //parseInt is for converting text to number 

    //Get doc name if both dates matches 
    if (wholedate == matchcriteria) { 
    Logger.log(lastfile[i].getId()); 
    Logger.log(lastfile[i].getName()); 
    } 
    } 
} //comment this as a part of loop 

} 

之間: - 如果有更簡單的方法可以做到這一點,請讓我知道。

+0

我認爲你會更好地使用DriveApp.folder.searchfiles https://developers.google.com/apps-script/reference/drive/folder#searchFiles(String)從上次運行後獲取文件,然後迭代那些 – DavidF

回答

1

不要在內部和外部循環中都使用「i」。這將是一個問題。

做這樣的事情會不會更容易,所以你只做一個循環?

var mostRecentDate = new Date(2000,01,01); 
var fileName=""; 
var fileId=""; 

for(var i = 1; i<5; i++){ 

    var folder = DocsList.getFolder('Folder'+i); 
    var files = folder.getFiles(); 
    for(var j in files) { 
     if(files[j].getDateCreated()>mostRecentDate){ //or getLastUpdated 
     mostRecentDate=files[j].getDateCreated(); 
     fileName=files[j].getName(); 
     fileId=files[j].getId(); 
     } 

    } 
} 
Logger.log("File: " + filename + " Id: " + fileId + " Created: " + mostRecentDate); 

您可能需要,如果你有文件數量龐大&文件夾遍歷做分頁。

+0

謝謝,我加了var fileId =「」;但是日誌顯示「[13-12-17 18:51:40:040 IST] File:Id:Created:Tue Feb 01 01 2000 00:00:00 GMT + 0530(IST)」,我也嘗試了chagning新的日期到今天的日期(以防萬一),但仍然是不同的創建日期相同的消息。 – Vasim

+0

我沒有測試此代碼 - 將if(files.getDateCreated ...更改爲if(文件[j] .getDateCreated ... – jkhouw1

+0

引發語法錯誤 – Vasim

1

您可以使用DocsList檢索上次修改的文件。你告訴你想要最後創建的,但最後修改的可能是有用的。檢查代碼如下:

function findLastModified() { 
    //Retrieve folder 
    var folder = DocsList.getFolderById("0B0kQD4hSd4KASUJKb2cya0NET1U"); 

    //Ask for 5 files 
    var numberOfFiles = 5; 

    //The first parameter is the search query, in this case we want all files 
    var filesResult = folder.findForPaging("", 5); 

    //By Default they will be sorted by last modified date 
    var files = filesResult.getFiles(); 

    Logger.log("Found "+files.length+" files"); 

    //Iterate 
    for(var x in files) { 
     var file = files[x]; 
     Logger.log(file.getLastUpdated()); 
     } 
    } 

實時版本here

+0

不錯,這似乎工作,但5請求5個文件意味着什麼;我的意思是將代碼你看5個文件,在這種情況下,如果文件超過5個,這可能是個問題,對嗎? – Vasim

+0

5是分頁大小。 https://developers.google.com/apps-script/reference/docs-list/folder#findForPaging(String,Integer,Token)它不應該是一個問題,因爲它正在查看已排序列表的前5個。 (但是修改日期不是創建日期) – jkhouw1

+0

不能使用某個文件夾,附加的是[執行腳本](https://drive.google.com/file/d/0B9u_K1HbgiEKamJhQjdwdzdZMk0/edit?usp=sharing)任何特定的原因。它有3個Google演示文稿。 – Vasim