GASでSpreadsheetにデータを挿入していくときのTip

ちょっとした調べ物をするために、Google Apps Script(以下GAS)を使ってデータを作り、スプレッドシートに記録していきました。日付ごとにシートを作って、それぞれのシートに一定量のデータを記録していくスクリプトです。

問題なく動いていたのですが、あるところから急に実行速度が遅くなり、実行時間が上限にあたり途中で止まってしまうようになりました。何が原因だろうと調べたところ、下記のような感じで取得したデータを1行ずつ追加しているところに問題がありました。

sheet.getRange(row_number, 1, 1, column_count ).setValues([[ ... ]]);

Sheetを新規で作成すると、行数の初期値が1000行となっており、上記の例でrow_numberが1000を超えると、1行ずつ「行を追加して記録」という形になってしまいます。この1行ずつ行を追加していくというのが処理を遅くする原因になっていました。

ということで、処理の最初の方で、下記のようにがっつりとSheet全体の行数を確保することで問題を回避できました。

sheet.insertRows(1,max_row_count);