GASでプロパティストアを利用してみる〜その4 配列を値として登録する〜

GAS
この記事は約5分で読めます。

さて、前回は少し脱線して、プロパティストア関連の無料利用の上限をみてきました。

今回は本線に戻って、いったん最終回の配列をプロパティストアに登録する方法およびその際に気をつけたいことを解説していきます。

スポンサーリンク
もしも_楽天

前回までのおさらい

1回目:プロパティストアの概要

2回目:プロパティストアから値を取得する方法、値を入力する方法

プロパティストアを一般的に利用する方法は主に上記2つがわかれば対応可能だと思います。

では、最終回の今回はちょっと派生的な利用方法の時に生じるパターンで使える、配列の登録方法および呼び出し方法です。

対象データ

さて、シンプルにこんなデータをプロパティストアに登録するとしましょう。

対象データ

イメージとしては、valueに配列として値が入力されることを期待するのですが、実はgetDataRange().getValues()で取得した値をsetPropertyに入れ込んでもうまくいきません。

ダメなケース:配列データを単純にsetPropertyするコード

さて、それでは実際に以下で解説したようなコードを利用して、配列を登録してみましょう。

参考に作成すると以下のようなコードになりますね。

function myFunction(){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName("main");
   var data = sheet.getDataRange().getValues();
   var name = "test";
   
   var prop = PropertiesService.getScriptProperties();
   prop.setProperty(name, data)
 }

実行すると?

配列を単純にsetpropertyした場合

あれ?配列で入る予定のvalue部分が何やら文字化けみたいになってしまっていますね。

そうなんです、シンプルに配列データをプロパティに入れ込むと化けてしまって使い物になりません。

もちろん、これを呼び出して値を取得しようとしても、ダメ(化けてしまったデータが呼び出されます)です。

//呼び出しコード
function myFunction_read(){
   var name = "test";
   var prop = PropertiesService.getScriptProperties();
  var data = prop.getProperty(name);
   Logger.log(data);
 }

呼び出し結果は、当然登録された値が取得されるだけなので、以下のようなものです。

これだと使い物になりませんね。。

OKなケース:配列データをJSON文字列化してsetPropertyするコード

さて、それでは実際に動作するスクリプトの紹介です。

function myFunction2() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName("main");
   var data = sheet.getDataRange().getValues();
   var name = "test2";
   
   var prop = PropertiesService.getScriptProperties();
   prop.setProperty(name, JSON.stringify(data));
 }

変化させたのはシンプルに、渡す値をJSON.stringfy()しているだけです。これで実行すると以下のようになります。

期待した通り、配列として値が登録されています。

なお、登録の場合は、jsonで文字列化して登録する必要がありましたが、呼び出しの場合はjson.parseする必要は特にはありません。もちろんしても動作しますが。

//parseして表示する場合
function myFunction2_read(){
   var name = "test2";
   var prop = PropertiesService.getScriptProperties();
 var array = JSON.parse(prop.getProperty(name));
 Logger.log(array)
 }
//parseせずに単純に取得する場合
function myFunction2_read2(){
   var name = "test2";
   var prop = PropertiesService.getScriptProperties();
 var data = prop.getProperty(name);
 Logger.log(data)
 }

どちらでも結果は以下で同じです。要は登録するときはJSONで文字列化させないと化けてしまいますが、登録されている物を呼び出すときは、登録されているデータが配列なのでそのまま取得も可能ということです。

まとめ

さて、最終回予定の今回は配列を値として登録する方法をみてきました。

json.stringfy()で文字列化してsetpropertyを利用すればできました。最初のうちはあまり使うことが無いかもですが、いわゆるGAS6分の壁を超えたい場合や、その他動作ログをデータとして一時保存したい場合などユースケースのあるプロパティストアへの配列登録なので、少しでも興味持ってもらえればと思います。

関連記事: GASでプロパティストアを使ってみる

スクリプトプロパティの概要や情報の登録・取得方法を紹介しています。プロパティストアはAPIキーやマジックナンバーなどの保存に適していますので是非お試しください。

  1. GASでプロパティストアを利用してみる〜その1 概要〜
  2. GASでプロパティストアを利用してみる〜その2 プロパティストアにアクセスして値を取得・登録する〜
  3. GASでプロパティストアを利用してみる〜その3 利用制限(上限)について〜
  4. GASでプロパティストアを利用してみる〜その4 配列を値として登録する〜