【GAS GoogleAppsScript | スプレッドシート】GASでスプレッドシートを操作する(SpreadsheetAppクラス)

スポンサーリンク

GASでスプレッドシートを操作する

表題の通りですが、GASでスプレッドシートを操作する基本的な流れと方法について紹介したいと思います!

大まかな流れ

GASには、Googleサービス(スプレッドシートやGmail、スライド、フォームなど)を操作するための便利なクラスがあらかじめ用意されています。GASでGoogleサービスを操作するためには、そのクラスやクラスの配下のメンバーを利用します。

スプレッドシートを操作する場合は、その中でも「Spreadsheetサービス」を利用します。Spreadsheetサービスには、次の図にあるようなクラスが用意されています。

  1. SpreadsheetApp
  2. Spreadsheet
  3. Sheet
  4. 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サービスもですが、それらを開くために一意のidurlが付けられています。スプレッドシートで言うと次の場所から分かります。

スプレッドシートを開いた時のアドレスバーになる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クラスについて説明しました!次回以降以下の配下のクラスについて順番に説明していきます!