GoogleAppScriptを使って、Googleスプレッドシートにデータを出力することは、よくあると思います。
それとは逆に、Googleスプレッドシート上のデータを使って、GoogleAppScriptで処理を行うことも、同様にありますね。
今回はGoogleスプレッドシートの列データを対象に、GoogleAppScriptの配列データとして扱う方法を解説します。
セル範囲を取得 ~ getRange()
まずは、取得したいデータの対象セル範囲を特定します。
事前に取得したSheetオブジェクトに対して、getRangeメソッドを使い、Rangeオブジェクトの形で取得します。
構文は以下の通りです。
Sheetオブジェクト.getRange(開始行番号, 開始列番号, 行数, 列数);
実際のサンプルは以下のようになります。
function myFunction() {
// 2行目,1列目(A2セル)を開始位置として、3行分を範囲として取得
// 列数は省略されているので、デフォルトの1列となる
range = sheet.getRange(2, 1, 3);
}
行数の指定として、「シート上に存在する最後のデータまで」の条件で指定したいことが多いと思います。
その場合は、別の記事で紹介したgetLastRowメソッドを使用した、以下の形式が便利です。
function myFunction() {
// 2行目,1列目(A2セル)を開始位置として、3行分を範囲として取得
// 列数は省略されているので、デフォルトの1列となる
range = sheet.getRange(2, 1, sheet.getLastRow()-1);
}
範囲データを配列として取得 〜 getValues()
上記で取得したRangeオブジェクトに対して、getValues()メソッドを使うことで、配列データとして取得できます。
構文は以下の通りです。
Rangeオブジェクト.getValues();
先程のsampleコードに対して適用する場合、以下のようになります。
function myFunction() {
range = sheet.getRange(2, 1, 3);
list = range.getvalues();
}
このコードを、以下のサンプルのスプレッドシートに対して適用してみましょう。
対象のスプレッドシート例
取得結果はこちら。
[['A2'],['A3']]
残念ながら、2次元配列の形で取得されています。
今回は1列のデータなので、1次元配列で扱いたいという場合は、繰り返し処理を噛ませて展開してあげる必要があります。
こんな感じになります。
function myFunction() {
range = sheet.getRange(2, 1, 3);
list = range.getvalues();
// 整形後データを格納するための、空配列
list_new = [];
// 2次元配列を展開して、空配列に1次元データとして格納
for(var i=0;i<list.length;i++){
list_new.push(list[i][0])
}
}
参考記事