FWIW、私はこれに出くわしましたが、犯人はgetRange()
配列に数千行をプルする呼び出しでした。定期的に「読み込み中...」メッセージでハングアップします。
その範囲をドキュメントキャッシュに入れることで回避しました。キャッシュには配列ではなく文字列のみが保存されるため、少し厄介ですが、配列.split(',')
にアクセスする必要がある場合は、 を使用して強制的に配列に戻すことができます。
(私の場合、それは単一の配列です。おそらく、各行または列を独自のキャッシュに送信するか、キャッシュ値を一度にN個のアイテムを読み込んで、各Nが独自のものになることにより、二重配列を使用してそれを行う方法があります配列。)
私のコードからの関連ビットは次のとおりです。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mySheet"); //search the "mySheet" sheet
// is the big list already in the cache?
var cache = CacheService.getDocumentCache();
var cached = cache.get("columnValues");
if (cached != null) {
var columnValues = cached.split(','); // take the cached string and make it an array
} else { // it's not in the cache, so put it there
var column = 1; // the column with your index
var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); // first row is header
cache.put("columnValues",columnValues,60000); // this forces the array into a string as if you used .join() on it
}
これは間違いなく Apps Script のバグです。getRange() は、タイムアウトやエラー メッセージなしでハングすることはありません。しかし、少なくとも回避策があります。これは私がそれに対して開いたバグです。シートから完全な code.gs も入れました。