2017-08-24 9 views
0

今日、他のスプレッドシートに名前でアクセスするために使用する.next()関数呼び出しを含む特定のGoogleスプレッドシートに接続されたスクリプトは実行できません。それは実行中のスクリプトをキャンセルしますキャンセル最大実行時間を超えるまでスプレッドシートの先頭にメッセージを閉じます。奇妙なことに、私はまったく同じスクリプトを使って毎日同じようなファイルを持っており、昨日のファイルはうまくいきます。私は以下のMWEを作成しました。だから、私はそれを実行すると、最初の2つのメッセージのアラートを得ることができますが、3番目のアラートは取得できません。next()関数の呼び出し時にGoogle Appsスクリプトがハングする理由

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()関数が呼び出されている行に「認可はこのアクションを実行するために必要とされる」ようなことを言って、エラーメッセージに気づきます。私はファイルの承認を取り消そうとして、もう一度認可を試みましたが、それは助けになりませんでした。私は与えられたスクリプトに完全にアクセスしようとしましたが、それを行う方法はGoogleにはできませんでした。 多分、私のスクリプトにいくつかの機能を追加して、認証中に完全なアクセスを要求することができます。それはおそらく私の主な機能を実行するのに役立ちます。 私の質問は:

  1. なぜスクリプトがハングアップするのですか?
  2. これを修正するにはどうすればよいですか?
  3. Googleアカウントの無料版でこのような種類のことが(ランダムかつ通知なしに)発生する可能性がありますか?
+0

はクーパーのソリューションをお試しください。 getFilesByName()メソッドは、FileIteratorを返します。このFileIteratorを次に呼び出すと、next()メソッドが呼び出されます。イテレータが最後に達した場合、next()を呼び出すと例外がスローされ、スクリプトが停止します。 whileループでhasNext()を使用してイテレータが最後に達したかどうかを確認する必要があります –

+0

この問題の翌日、何も変更せずにすべてが以前と同じように動作し始めました。おそらく、Googleのサイト上に問題やバグがありました。私は答えを確認する機会がありませんでした。 @AntonDementievあなたのお返事ありがとうございます、私はあなたについて何を話しているのか知っていますが、私のイテレータは届かず、ドライブに作成された "ファイル"という名前のファイルがあるので、例外として、シート自体やスクリプトエディタからスクリプトをどこで実行したかにかかわらず、エラーメッセージなしでハングするだけです。 – 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(); 
    } 
    } 
関連する問題