39

特定対象: 「新しい」Google スプレッドシートのみ。

これは既知の問題であり、新しいシートで Google によって強調表示されています。

問題: Google スプレッドシートの google-apps-script で複雑な*カスタム関数を記述すると、セルの周りに赤いエラー ボックスが表示され、"読み込み中..." というテキストが表示されることがあります。

Google は次のことを提案しています。

これが発生した場合は、ページをリロードするか、関数の名前を変更して、すべての参照を新しい名前に変更してみてください。

ただし、この問題を経験している他の開発者 (および「読み込み中...」エラーを回避できない開発者) のために、これを (制限付きで) 一貫して回避する方法について、以下の回答に私の調査結果を書きました。


*この質問は、 Google スプレッドシートの不明確な「エラー...データの読み込み中」の問題に対する標準的な回答として扱っています。複雑な機能や遅い機能に限定されません。

4

13 に答える 13

5

重要なヒント: 実験しながら、スプレッドシート全体の複数のコピーを作成してください。3 つの Google スプレッドシートが破損し、完全にアクセスできなくなりました (更新ループでスタックしました)。これは、私がカスタム関数を試していたときに発生したので、注意してください!

この問題を解決するには、次の方法の 1 つまたは複数を試してください。

  1. Google が提案したように、スプレッドシートを再読み込みするか、関数の名前を変更するか、セル内のパラメーターを変更して、問題が解決するかどうかを確認してください。

  2. すべてのカスタム関数を try-catch ブロックで囲みます。これは、適切にテストされていない可能性のあるコードの問題を検出するのに役立ちます。例えば:

    try{ //メソッド }catch(ex){ return "Exception:"+ex; }

  3. 古いシートに戻って関数をテストし、無限ループや無効なデータ形式など、他の種類のエラーがないかどうかを確認します。関数が古いシートで機能しない場合、新しいシートでも機能せず、デバッグがより困難になります。

  4. どのパラメーターも、100 万 (1000000) を超える数値を参照していないことを確認してください。理由はわかりませんが、パラメーターとして 100 万を超える数値を使用すると、関数の実行に失敗します。必要に応じて、入力のサイズを縮小するように依頼してください (1000 で割るか、mm の代わりに M を依頼してください)。

  5. 数値が有効数字の通常のセットを超える可能性がある数値または浮動小数点の問題を確認します。新しいシートは数値に関して少し問題があるようです。そのため、非常に大きな数値または非常に複雑な数値が予想される場合、関数が機能しない可能性があります。

最後に、上記のいずれも機能しない場合は、古い Google シートに切り替えて作業を続けてください。機能の実行に失敗するその他の制限や原因を見つけた場合は、私と g シートのヘビー ユーザーである他のユーザーのために、以下にそれらを書き留めてください。

于 2013-12-21T12:19:44.690 に答える
5

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 も入れました。

于 2015-10-13T19:24:20.193 に答える
2

私もあなたが説明した問題を抱えていました。複数の方法で発生する可能性があるようです。

カスタム関数が呼び出しからのデータに依存しているため、そのエラーが表示され=IMPORTRANGE()、その呼び出しが失敗していることに気付きました。

=IMPORTRANGE()そのインポート元シートの新しいバージョンをアップロードしたときに、インポート元の URL を更新するのを忘れていたため、呼び出しが失敗していることに最終的に気付きました。ゴミ箱に移動したファイルから IMPORTRANGE を実行しようとすると、無限の "Loading..." エラーが発生する可能性があります。

于 2015-01-07T18:00:26.487 に答える
1

アドオン

2 つのアドオンがあり、機能が読み込まれませんでした。

私はそれらを取り除きました、そしてすべては順調です!

于 2016-11-03T07:46:43.313 に答える
1

私にとっては、カスタム関数の名前を変更すると問題が解決しました。少なくとも今のところ。

于 2016-06-17T20:24:03.633 に答える