2017-08-24 90 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(); 
    } 
    } 
相关问题