
photo credit: Jonas Hellebuyck Vinyl memories via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
「初心者でもわかるGoogle Apps Scriptのクラスの作り方」をテーマにシリーズをお送りしています。
前回の記事はこちら。

GASのクラスにメソッドを追加する方法についてお伝えしました。
今回は、当初目標にしていたスプレッドシートのデータのクラス化を進めていきたいと思いますよ。
Google Apps Scriptでスプレッドシートのデータの1行分を表すクラスを作る方法です。
では、行ってみましょう!
前回のおさらい
まずは前回のおさらいからです。
作成したスクリプトはこちらでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function myFunction() { var Person = function(name){ this.name = name; }; Person.prototype.greet = function(){ Browser.msgBox(this.name + "です、こんにちは!"); }; var p = new Person("Bob"); Logger.log(p); p.greet(); var q = new Person("Tom"); Logger.log(q); q.greet(); } |
nameプロパティと、greetメソッドを持つクラスPersonを作成しましたね。
スプレッドシートの一行分を表すクラスを作る
さて、以下のようなスプレッドシートのデータがあります。
前述のクラスPersonを拡張して、これらのデータの一行分を表すクラスを作成していきたいというのが今回のお題となります。
見出しごとにプロパティを作る
スプレッドシートの表の見出しとして、id、name、gender、birthdayとありますので、これをそのままプロパティ名として流用すれば良さそうですよね。
例えば、こんな感じでしょうか。
1 2 3 4 5 6 |
var Person = function(id, name, gender, birthday){ this.id = id; this.name = name; this.gender = gender; this.birthday = birthday; }; |
すると、インスタンスの生成は…
1 |
var p = Person('a01', 'Bob', 'male', new('1993/1/1')); |
うん、めんどい。
バラバラではなくて、まとめてコンストラクタにデータを渡したいですよね。
コンストラクタに一行分の配列を渡す
GASの場合は、スプレッドシートのデータをいい感じに二次元配列に取得することができます。

この二次元配列から、要素である一次元配列を取り出すと、それが行のデータの集合となっているわけです。
なので、コンストラクタを以下のように、行のデータの集合である配列recordを受け取るようにしてみましょう。
1 2 3 4 5 6 |
var Person = function(record){ this.id = record[0]; this.name = record[1]; this.gender = record[2]; this.birthday = record[3]; }; |
すると、インスタンスの生成は
1 |
var p = Person(values[1]); |
などと書けます。
スッキリしてて良い感じです。
たまたま、スプレッドシートのデータの列が増えても、コンストラクタさえ変更すれば、インスタンスの生成はそのままでいきそうですしね。
スプレッドシートの一行分のデータをクラス化するスクリプト
では、上記をもとにまとめと動作確認をするスクリプトです。
こちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
function myFunction() { var Person = function(record){ this.id = record[0]; this.name = record[1]; this.gender = record[2]; this.birthday = record[3]; }; Person.prototype.greet = function(){ Browser.msgBox(this.name + "です、こんにちは!"); }; Person.prototype.log = function(){ Logger.log('%s|%s|%s|%s|', this.id, this.name, this.gender, this.birthday); }; var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); var p = new Person(values[1]); p.log(); p.greet(); var q = new Person(values[2]); q.log() q.greet(); } |
Personのインスタンスが持つデータを確認するためのlogメソッドも作ってみました。
実行すると、BobさんとTomさんの分について、以下のようにメッセージダイアログが表示されつつ
以下のように、インスタンスが持つデータのログを確認することができます。
まとめ
以上、Google Apps Scriptでスプレッドシートのデータの1行分を表すクラスを作る方法をお伝えしました。
GASではスプレッドシートのデータが二次元配列で取得できますので、その要素である一次元配列としてコンストラクタに渡してあげる形にすれば良いですね。
次回は、プロパティをプライベートにする方法についてお伝えしていきます。

どうぞお楽しみに!
連載目次:初心者向けGoogle Apps Scriptでクラスを作ろう
使いどころやそのメリットが分かりづらいGASの「クラス」。本シリーズでは、初心者でもわかるように「これでもか!」とじっくり着実にクラスとそのメリットについて解説をしていきます。- 【初心者向け】Google Apps Scriptでクラスを理解するためのオブジェクトの基礎知識
- 初心者でもできるGoogle Apps Scriptで最も簡単なクラスを作る方法
- Google Apps Scriptでクラスに最も簡単なプロパティを追加する方法
- Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法
- Google Apps Scriptでスプレッドシートのデータの1行分を表すクラスを作る方法
- Google Apps Scriptのクラスでプライベートプロパティを作成する方法
投稿者プロフィール
- 株式会社プランノーツ 代表取締役
-
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。
コメント