0

私は簡単な Google Apps スプレッドシート スクリプトを作成しました。このスクリプトは、いくつかの行で詳細を取得し、それらを 1 つのリストに変換します。すべて非常に簡単です。問題は、スクリプトがランダムなポイントで停止し続け、ループが終了しないことです。エラー メッセージは表示されず、スクリプト エディターの上部にあるメッセージは、明らかに停止しているにもかかわらず、実行中であることを示しています。

最初は何らかの理由で調整されているのではないかと思っていましたが、ランダムな停止ポイント (ソース シートの 6x 行、7x 行、時には数百行) とエラー メッセージの欠如は、そうではないことを示唆しています。

なぜこれが起こっているのかを理解するのを手伝ってくれる人はいますか? スクリプト エディタ ウィンドウから実行しているからでしょうか。アプリ スクリプトの実行が停止する可能性がある他の理由 (ネットワークの問題など) はありますか。

ありがとう!

function convertTrimsToList(){
  var ss = SpreadsheetApp.openById("[REDACTED]");
  var sheet = ss.getSheets()[0];
  var newss = SpreadsheetApp.create("MMT List");
  var newsheet = newss.getSheets()[0];

x = 1; z = 1; i = 1; q = 1; while (sheet.getRange(x,1).getValue() != "") { sheet.getRange(1,6).setValue("Processing row " + x); y = 5; while (sheet.getRange(x,y).getValue() != "") { sheet.getRange(1,7).setValue("Processing row " + y); if (x != 1) { if (y == 5 && sheet.getRange(x,1).getValue() != sheet.getRange((x-1),1).getValue()) { i++ } } newsheet.getRange(z,1).setValue(i); newsheet.getRange(z,2).setValue(q); newsheet.getRange(z,3).setValue(sheet.getRange(x,y).getValue()); z++ y++ } if (x != 1) { if (sheet.getRange(x,3).getValue() != sheet.getRange((x-1),3).getValue()) { q++ } } else { q++ } x++ } }

4

2 に答える 2

2

あなたのコードはかなり非効率的です。サービスに対して行われるすべての呼び出しは高価です。これがおそらく、コードが突然停止する理由です。より効率的な方法は、すべてのデータを 2D 配列に読み取り、2 つの入れ子になったループの後でスプレッドシートに一度に書き戻すことです。

于 2012-07-24T16:11:18.033 に答える
0

これは、ここで発生していたのと同じ問題であることが判明しました。GoogleApps Scriptで最大実行時間を超えました-エラーメッセージが表示されなかった理由はわかりませんが、同じ問題のようです。そのため、コードをリファクタリングしました。それを修正します。

于 2012-07-24T16:41:48.580 に答える