GASでスプレッドシートを操作する
表題の通りですが、GASでスプレッドシートを操作する基本的な流れと方法について紹介したいと思います!
大まかな流れ
GASには、Googleサービス(スプレッドシートやGmail、スライド、フォームなど)を操作するための便利なクラスがあらかじめ用意されています。GASでGoogleサービスを操作するためには、そのクラスやクラスの配下のメンバーを利用します。
スプレッドシートを操作する場合は、その中でも「Spreadsheetサービス」を利用します。Spreadsheetサービスには、次の図にあるようなクラスが用意されています。
- SpreadsheetApp
- Spreadsheet
- Sheet
- Range
この4つのクラスは、「SpreadsheetApp→Spreadsheet→Sheet→Range」というような順番で階層構造になっています。
各クラスには、その下のクラスを取得するメンバーが用意されているので、目的のオブジェクトを取得するためには、「SpreadsheetApp」から順番に下のオブジェクトをたどって取得していくことになります。
※他のサービスでも基本的には同じ様に、上位階層のオブジェクトから目的のオブジェクトまでをたどって取得していきます。
サンプル
例えば上のサンプルでB3セルの値を取得するには次のようにたどっていきます。
// B3セルがアクティブになっている前提で
function test(){
// 順番にたどっていく
var rng = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveRange()
}
※B3セルがアクティブになっている(カーソルがB3セルにある)前提です。
①SpreadsheetApp
②getActiveSpreadsheet()
③getActiveSheet()
④getActiveRange()
この順番で「.」ドットでつないで、最終取得出来たRangeオブジェクトを変数「rng」に格納しています。
このサンプルでは、B3セルがアクティブな前提でしたので、それぞれgetActiveなんちゃらのメンバー(メソッド)を使っていますが、取得の方法含め各クラスにはいろいろなメンバーが用意されています。
SpreadsheetAppクラス
まずはSpreadsheetAppクラスの主なメンバーです。
メンバー | 戻り値 | 説明 |
---|---|---|
create(name) | Spreadsheet | 新しいスプレッドシートを作成する |
getActiveRange() | Range | アクティブなセル範囲を取得する |
getActiveSheet() | Sheet | アクティブなシートを取得する |
getActiveSpreadsheet() | Spreadsheet | アクティブなスプレッドシートを取得する |
open(file) | Spreadsheet | fileをスプレッドシートとして開く |
openById(id) | Spreadsheet | 指定したidのスプレッドシートを開く |
openByUrl(url) | Spreadsheet | 指定したurlのスプレッドシートを開く |
serActiveRange(range) | Range | rangeをアクティブにする |
setActiveSheet(sheet) | Sheet | sheetをアクティブにする |
setActiveSpreadsheet(spreadsheet) | void | spreadsheetをアクティブにする |
(注)サンプルでやったようなアクティブなオブジェクトを取得するメソッドは、「コンテナバインドスクリプト」でのみ使えます。
バインドされていないスプレッドシートを取得する場合は次の方法で取得することが出来ます。
SpreadsheetApp.openById(id)
SpreadsheetApp.openByUrl(url)
スプレッドシートや他のGoogleサービスもですが、それらを開くために一意のid・urlが付けられています。スプレッドシートで言うと次の場所から分かります。
スプレッドシートを開いた時のアドレスバーになるURLです。このURLが、「url」で、そのurlの中の
https://docs.google.com/spreadsheets/d/{ID}/edit#gid=0
{ID}の部分がidです。
つまりURLが分かれば、IDは分かることになりますね。
こんな感じのコードになります。
function test(){
// ***id***の部分は環境によって変わります。
// urlを使って取得
var url = "https://docs.google.com/spreadsheets/d/***id***/edit#gid=0"
var spreadsheet = SpreadsheetApp.openByUrl(url)
Logger.log(spreadsheet.getName()) //Spreadsheet名がログに出力される
// idを使って取得
var id = "***id***"
var spreadsheet = SpreadsheetApp.openById(id)
Logger.log(spreadsheet.getName()) //Spreadsheet名がログに出力される
}
おまけ
ちなみに、SpreadsheetAppクラスの主なメンバーの表を見たときに「おや?」と思った方もいたかもしれません。
下位オブジェクトを取得するときには「上位オブジェクトから順番にたどる」と説明したのに、なんでいきなりRangeとSheetを取れそうなやつがあるんだ?ということですね。
そうなんです。getActiveなんちゃらのメンバーは、コンテナバインドスクリプトでしか使えないと紹介しましたが、コンテナバインドスクリプトであれば、順番に辿らなくても次のメンバーを使って直接セル範囲やシートを取得することが出来ます!
- getActiveRange()
- getActiveSheet()
間違っていませんのでご安心を(^^)
まとめ
SpreadsheetAppクラスについて説明しました!次回以降以下の配下のクラスについて順番に説明していきます!
コメント