Google Apps Scriptでスプレッドシートの表をインスタンス配列化する方法


array

photo credit: wwward0 tokyobike(s) via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにシリーズ連載をお送りしております。

前回の記事はこちら。

Google Apps Scriptで即時関数にクラスを定義する理由とその方法
「初心者向けGoogle Apps Scriptでクラスを作る!」シリーズをお伝えしています。今回は、GASで即時関数にクラスを定義する理由とその方法についてお伝えします。スコープとthisが重要な役割を果たします。

クラスの定義を即時関数化しました。

さて、今回はスプレッドシートの表について、インスタンス配列化していきます。

もともと、そこが目標でしたからね。

ということで、Google Apps Scriptでスプレッドシートの表をインスタンス配列化する方法です。

では、行ってみましょう!

前回のおさらい

お題としているスプレッドシートはこちらです。

スプレッドシートのテーブル

この一行ずつを表すクラスを前回まで作成しておりました。

そのコードがこちらですね。

(function(global){

  var Person = function(record){
    var _id = record[0];
    this.name = record[1];
    this.gender = record[2];
    this.birthday = record[3];
    
    Object.defineProperties(this, {
      id: {
        get: function(){
          return _id;
        }
      }
    });
  };
  
  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);
  };

  global.Person = Person;

})(this);

そして、その検証用のmyFunctionがこちら。

function myFunction() {  
    
  var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  var p = new Person(values[1]);
  
  p.log();
  
}

…まあ、そんなにたいしたことしていませんが汗。

さて、スプレッドシートの一行分のクラスを作ったのはわかったのですが、表全体はまだ上手に取り扱えていない感じです。

ということで、今回はスプレッドシートの表を取り扱えるようにしていきますよ。

スプレッドシートをインスタンスの配列として格納する

それで、GASの場合は「集合」を取り扱うのであれば、配列がすごく便利なんですよね~。

例えば、変数personsを配列として用意して、そこに各行を表すPersonクラスのインスタンスを要素として追加していけば良さそうです。

そのスクリプトがこちらです。

function myFunction() {  
    
  var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
  var persons = [];
  values.shift();
  for(var i = 0; i < values.length; i++){
    persons[i] = new Person(values[i]);
    persons[i].log();
  }
 
}

実行すると…

スプレッドシートの表をインスタンスの配列にしてログ出力した

おー、いい感じですね!

配列から見出し行を取り除く

5行目のshiftメソッドだけ紹介しておきますね。

これはArrayオブジェクトに用意されているメソッドで、配列の最初の要素を取り除くというものです。

Arrayオブジェクト.shift()

戻り値は取り除いた要素ですが、破壊的メソッドですので対象となるオブジェクトについて操作して変化を加えちゃいます。

変数valuesは二次元配列になっていて、最初の要素は取得した範囲の一行目、つまり見出し行の配列になっているので、それを取り除いちゃってるわけですね。

二次元配列から見出し行を取り除きたいときに、便利っすよ!

まとめ

以上、Google Apps Scriptでスプレッドシートの表をインスタンス配列化する方法でした。

GASの配列、便利っすよね!

さて、今回は配列で集合を表したわけですが、これもクラス化していきたいですよね。

次回は、そのあたりを進めていきます。

Google Apps Scriptでデータの集合を表すクラスを作成する方法
「初心者でもわかるGoogle Apps Scriptのクラス」をテーマにお送りしております。今回は、GASでスプレッドシートのデータの集合を表すクラスを作成する方法をお伝えしていきます。

どうぞお楽しみに!

連載目次:初心者向けGoogle Apps Scriptでクラスを作ろう

使いどころやそのメリットが分かりづらいGASの「クラス」。本シリーズでは、初心者でもわかるように「これでもか!」とじっくり着実にクラスとそのメリットについて解説をしていきます。
  1. 【初心者向け】Google Apps Scriptでクラスを理解するためのオブジェクトの基礎知識
  2. 初心者でもできるGoogle Apps Scriptで最も簡単なクラスを作る方法
  3. Google Apps Scriptでクラスに最も簡単なプロパティを追加する方法
  4. Google Apps Scriptでクラスに最も簡単なメソッドを追加する方法
  5. Google Apps Scriptでスプレッドシートのデータの1行分を表すクラスを作る方法
  6. GASでゲッターを使って簡単なプロパティを作成する方法
  7. GASでセッターを使ってプロパティの入力に制限をかける

タイトルとURLをコピーしました