5

google-spreadsheetからgoogle-apps-scriptを使用して、fetchUrlを使用して数百行のデータをフェッチし、sheet.appendRowを使用してそれらをシートに貼り付けようとしています。

データの取得と配列への分割はOKです。ただし、それらを1行ずつシートに追加すると、エラーが発生せずに失敗し、行が空になることがあります。

問題を再現するための非常に簡単な例を次に示します。

function appendTest() {
  var sSheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet = SpreadsheetApp.setActiveSheet(sSheet.getSheets()[2]);
  for (var i = 0; i <= 100; i++) {
      sheet.appendRow([i, 1, 2, 3, 4, 5]);
  }
}

約5行または10行で、時々異なり、空になります。Utilities.sleep()の挿入も機能していないようです。

誰かがこの状況を取り除くためのアイデアを持っていますか?前もって感謝します。

4

3 に答える 3

5

このようにシートへのバッチ書き込みを使用してみることができます

function appendTest() {
  var target = new Array()
  var sSheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet = SpreadsheetApp.setActiveSheet(sSheet.getSheets()[2]);
  for (var i = 0; i <= 100; i++) {
      target.push(['some data','in some columns','bla bla']);
  }
sheet.getRange(sSheet.getLastRow()+1,1,target.length,target[0].length).setValues(target);
}

シートが「短すぎる」と思われる場合は、ループに空の行を追加することもできます。

編集:マイケルの適切な回答に従って、次を使用して必要な行を追加することをお勧めしますsheet.insertRowsAfter(sheet.getMaxRows(), target.length)

于 2012-11-22T10:57:00.890 に答える
4

ループ内でappendRowを使用することは不安定であり、ベストプラクティスではありません。参照してください:

https://productforums.google.com/forum/#!topic/docs/y0E9PB_VTJw

この問題の議論のため。

于 2012-11-22T16:10:36.413 に答える
2

ちょっとしたコメント:私はループでappendRowを使用し、一度に最大30行を追加します。このスクリプトは、現在約1週間毎日使用されています。

興味深いのは、スクリプトのテスト中に、約100行を追加するようにスクリプトを設定すると、行が欠落していることもわかりました。しかし、宛先スプレッドシートを手動で簡単に更新した後、行の欠落は見られませんでした。だから私は行が実際に追加されたと思いましたが、それはバグですか?彼らのディスプレイにあります。

于 2012-11-25T00:10:47.953 に答える