
photo credit: RobW_ Ropes and Splices via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptでスプレッドシートのデータを配列に格納して操作する方法についてお伝えしています。
前回はこちらの記事でした。
配列を使ってシートの末尾にデータ行を追加する方法についてお伝えしました。
じゃあ、シートの末尾でない場合はどうなの?
ということになりますよね。
今回は、Google Apps Scriptでシートの任意の箇所にデータ行を挿入する方法についてお伝えします。
SpreadsheetサービスのAPIを使う方法と、配列を使う方法の両方を比較してみますよ。
では、行ってみましょう!
スプレッドシートのシートにデータ行を挿入する
まず、SpreadsheetサービスのAPIを使ってデータ行を挿入する方法をお伝えします。
以下のようなシートがあります。
見てわかります通り、北海道、青森県、岩手県のデータ行が抜けてしまっていますね。
それら3道県のデータ行を、2行目に挿入してみましょう。
SpreadsheetサービスのAPIを使う場合
- 2行目に空白行を3行分挿入する
- 挿入した空白行にデータを書き込む
という流れになります。
insertRowsメソッドでシートに空白行を挿入する
まず、シートに空白行を挿入するにはinsertRowsメソッドを使います。
書き方は
です。
これで指定した行位置に、指定した行数の空白行を挿入します。
行数は省略できますが、その場合には1行となります。
insertRowsメソッドを使ってデータ行を挿入する
insertRowsメソッドを使って、前述のお題である北海道から岩手県までのデータ行を挿入するスクリプトを作りました。
function insertRecords(){ var mySheet = SpreadsheetApp.getActiveSheet(); arrData = [ ['北海道','札幌市',5422873,78421.34], ['青森県','青森市',1321863,9644.74], ['岩手県','盛岡市',1284384,15278.89] ]; var rows = arrData.length; var cols = arrData[0].length; mySheet.insertRows(2,rows); mySheet.getRange(2,1,rows,cols).setValues(arrData); }
14行目のinsertRowsメソッドで2行目の位置に3行の空白行を挿入、その後にsetValuesメソッドでデータを書き込みます。
getRangeの指定の方法はちょっとややこしいですが、以下記事を参考にして下さい。
実行結果と評価
実行すると、以下のように見出し行のすぐ下に3行追加されます。
実はこのスクリプトのAPIリクエスト回数はgetActiveSheet、insertRows、getRange、setValuesがそれぞれ1回ずつで計4回で、かつデータ行が増えてもその回数は増えないのにお気づきでしょうか。
意外と優秀ですね。
配列を使ってシートにデータ行を挿入する
では、これと同じように、データ行の挿入を配列を使って実現してみましょう。
一旦、シート上のデータを全て配列に格納するので、前回の記事でも紹介したこちらのスクリプトをベースにします。
var mySheet = SpreadsheetApp.getActiveSheet(); var arrData = mySheet.getDataRange().getValues(); //処理 mySheet.getRange({書き出す範囲}).setValues(arrData);
上記の「//処理」の箇所に、データ行を挿入する処理をすればよいですね。
spliceメソッドで配列に要素を追加する
配列に要素を追加するにはspliceメソッドを使います。
書き方はこうです。
実はspliceメソッドは
- 指定の配列番号の位置について
- 削除する要素数分の要素を削除しつつ
- 追加する要素1,追加する要素2,…を追加する
という削除と追加を兼ね備えた万能メソッドです。
削除する要素数を0にすれば、単純に要素の追加をするだけです。今回やりたいことですね。
また、追加する要素1以降は省略可能です。削除だけしたいときは、全て省略すれば良いということになります。
削除に関しては、次回の記事で紹介できればと思います。
spliceメソッドを使ってシートにデータ行を挿入する
では、冒頭のお題に応えるべく、シートにデータ行を挿入してみましょう。
以下スクリプトを作成しました。
function insertRecords(){ var mySheet = SpreadsheetApp.getActiveSheet(); var arrData = mySheet.getDataRange().getValues(); arrData.splice(1,0, ['北海道','札幌市',5422873,78421.34], ['青森県','青森市',1321863,9644.74], ['岩手県','盛岡市',1284384,15278.89] ); var rows = arrData.length; var cols = arrData[0].length; mySheet.getRange(1,1,rows,cols).setValues(arrData); }
APIの呼び出し回数はgetActiveSheet、getDataRange、getValues、getRange、setValuesが各1回ずつで計5回ですね。
今回紹介した二つの方法はいずれもAPIの回数としては優秀ですので、ケースバイケースで使いやすいほうを使っていいのではないかと思いますよ。
まとめ
Google Apps Scriptでスプレッドシートにデータ行を挿入する方法をお伝えしました。
- insertRowsメソッドを使って空白行を挿入する方法
- spliceメソッドを使って配列に要素を追加する方法
という二つの方法を紹介しましたが、都度使いやすいほうをチョイス頂ければと思います。
次回も配列を使って便利に処理するテクニックをお伝えしますね。
どうぞお楽しみに!