2017-08-24 56 views
0

今天,我無法運行連接到特定Google Spreadsheet的腳本,該Spreadsheet包含.next()函數調用,我使用它來按名稱訪問其他Spreadsheets。它顯示運行腳本取消關閉電子表格頂部的消息,直到超過最大執行時間。奇怪的是我每天都有類似的文件,而且腳本完全一樣,昨天的文件工作正常。我在下面創建了MWE。所以,當我運行它時,我可以得到前2條消息的警報,但不是第3條。爲什麼Google Apps腳本在調用next()函數時掛起

function test_script_hanging() { 
    var ui = SpreadsheetApp.getUi(); 
    ui.alert("before getting files by name"); 
    var getFilefile = DriveApp.getFilesByName("file"); 
    ui.alert("after getting files by name"); 
    var getID = getFilefile.next().getId(); 
    ui.alert("after getting Id"); 
} 

在某些情況下,我注意到一個錯誤信息,說什麼「需要授權才能執行此操作」上,其中.next()函數被調用就行了。我試圖撤消對該文件的授權並再次授權,但這並沒有幫助。我試圖給予完全訪問給定的腳本,但無法谷歌的方式來做到這一點。 也許我可以在我的腳本中添加一些更多的功能,以在授權期間要求完全訪問,也許這將有助於運行我的主要功能。 我的問題是:

  1. 爲什麼腳本掛起?
  2. 如何解決這個問題?
  3. 這樣的事情(隨機且沒有任何通知)是否可以在Google帳戶的免費版本中發生?
+0

嘗試Cooper的解決方案。 getFilesByName()方法返回一個FileIterator,然後調用next()方法。如果迭代器已經結束,調用next()將會拋出異常並停止腳本。您必須通過在while循環中使用hasNext()來檢查迭代器是否已達到最終結果 –

+0

本期的第二天,所有內容都開始像以前一樣工作,沒有任何更改。可能這是Google網站上的一些問題/錯誤。而且我沒有機會檢查任何回覆。 @AntonDementiev謝謝你的回答,我知道你在說什麼,但是我確定我的迭代器沒有達到,因爲我在驅動器中創建了名稱爲「file」的文件,並且它沒有拋出任何例外情況,它只是掛起而沒有任何類型的錯誤消息,無論我在哪裏從工作表本身或腳本編輯器運行腳本。 – eRic

回答

1

這個工作對我來說:

var fldr = DriveApp.getFolderById(folderID) 
    var file = fldr.getFilesByName(filename); 
    while(file.hasNext()) 
    { 
    var fi = file.next(); 
    if(fi.getName() == filename) 
    { 
     var id=fi.getId(); 
    } 
    }