GASでSpreadsheetの範囲取得時のTips
しばらくGoogleAppScript触ってました。
複数行を取得する際に馬鹿正直にループしたらパフォーマンスがひどかったので調べたら範囲.getValues()
で配列として取得するのがいいそうな。
A | B | |
---|---|---|
1 | アイテムA | .. |
2 | アイテムB | .. |
3 | アイテムC | .. |
4 | アイテムD | .. |
5 | アイテムE | .. |
# これを実行すると var sheet = SpreadsheetApp.getActiveSheet(); var values = sheet.getRange(1, 1, 5, 1).getValues(); Logger.log(values); #こんな2次元配列帰ってくる # ⇒ [[アイテムA], [アイテムB], [アイテムC], [アイテムD], [アイテムE]] # 1次元配列を期待していた # ⇒ [アイテムA, アイテムB, アイテムC, アイテムD, アイテムE]
仕様的に↓こんな行列も取得できるためそうならざるを得ないんだろうけど、1列で良かった場合は処理が面倒。
A | B | |
---|---|---|
1 | ■ | ■ |
2 | ■ | ■ |
3 | ■ | ■ |
4 | ■ | ■ |
5 | ■ | ■ |
なので、GASでUnderscoreを使って1次元化します。
ライブラリの読み込み
Scriptエディタの「リソース > ライブラリ > ライブラリを検索」に下記をいれます。
MGwgKN2Th03tJ5OdmlzB8KPxhMjh3Sh48
https://script.google.com/macros/library/versions/d/MGwgKN2Th03tJ5OdmlzB8KPxhMjh3Sh48
Underscore
がリストに追加されるので利用するバージョン(2016/04/07時点で24)を選択。
var _ = Underscore.load(); var sheet = SpreadsheetApp.getActiveSheet(); var values = sheet.getRange(1, 1, 5, 1).getValues(); values = _.flatten(values); Logger.log(values); # やったね # ⇒ [アイテムA, アイテムB, アイテムC, アイテムD, アイテムE]