この連載では僕が所属しているノンプロ研で受講した、GAS初級講座での気づきをまとめています。前回の記事はこちらです。 hirocom777.hatenadiary.org
前回はオブジェクトについて学びました。GASで提供されるサービスは、オブジェクトとして扱え、プロパティの取得/設定とメソッドの処理によって操作されます。
今回は、ここまで学んできたことを使ってスプレッドシートの操作に取り組みたいと思います。
Spreadsheet
Spreadsheetの操作は、Spreadsheetサービスで行います。以下のような階層構造になっています。
操作したいSheet・Rangeは先頭のSpreadsheetAppから「.」(ドット)で繋げてたどっていきます。
スプレッドシートの取得方法
スプレッドシートの取得方法は3つあります。
getActiveSpreadsheet()
アクティブなスプレッドシート=バインドしているスプレッドシートを取得します。openByUrl(URL)
URLでスプレッドシートを取得します。openById(ID)
URLの中に記述されているIDでスプレッドシートを取得します。
シートの取得方法
シートの取得方法も3つあります。
getSheetByName(シート名)
シート名で取得する方法です。ただし、シート名が変更されると取得できなくなってしまうので注意が必要です。getSheets()
配列(シートの並び順)から取得する方法です。シートの並び順が変更されると間違ったシートが選択されてしまうので注意が必要です。
3枚のシートがある場合に「const sheets = ss.getSheets();」とすると
sheets[0]で1番左のシート
sheets[1]で2番目のシート
sheets[2]で3番目のシート
を取得できます。
- SpreadsheetApp.getActiveSheet()
アクティブシートを取得する方法です。この方法はグローバルオブジェクト(SpreadsheetApp)から直接取得できます。アクティブシートは状況によって変わります。また、操作してアクティブな状況にしてもすぐに反映されないことがあるので注意が必要です。
セル範囲の取得方法
セル範囲の取得方法も3つあります。
Sheetオブジェクト.getRange(アドレス)
シート上のセルのアドレスで範囲を指定します。Sheetオブジェクト.getRange(行番号, 列番号[, 行数, 列数])
行番号,列番号,行数,列数で取得します。Sheetオブジェクト.getDataRange()
シート上のデータがあるセルの範囲を取得します。
セルの値
単体セルの値を取得するには、RangeオブジェクトのgetValue()を使います。 また、単体セルに値を設定するにはsetValue(値)を使用します。ただし、単体セルの読み書きはほとんど使いません。
複数のセル範囲を指定して読み書きをする場合には、2次元配列を使用します。
Rangeオブジェクト.getValues()
Rangeオブジェクトで指定した範囲の値を、2次元の配列で取得します。Rangeオブジェクト.setValues(2次元配列)
Rangeオブジェクトで指定した範囲に2次元配列の値をセットします。
setValuesにて値をセットする場合、Rangeオブジェクトの範囲と配列のサイズが合わないとエラーになります。これを避けるには、配列のlehgthプロパティでRangeオブジェクトの範囲を配列サイズを合わせればよいです。以下のようになります。
getRange(行番号, 列番号, values.length, values[0].length)
シートの最終行に追加
- Sheetオブジェクト.appendRow(配列)
指定したシートオブジェクトの最終儀用に配列で指定したデータを追加します。
次回もスプレッドシート操作
いかがでしょうか。スプレッドシート操作の基本がわかってきたと思います。次回もスプレッドシート操作です。配列等を使用した、具体的な操作例について学んでいきます。お楽しみに!!