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]