GASでプロパティストアを利用してみる〜その2 プロパティストアにアクセスして値を取得・登録する〜

GAS
この記事は約6分で読めます。
スポンサーリンク
もしも_楽天

前回までの流れ

プロパティストアに手入力でkeyと値を登録する方法をみてきました。

今回は以下の2つをみていきたいと思います。

①スクリプトを利用してプロパティストアへアクセスして、valueを取得する方法
②スクリプトからプロパティストアに登録する方法(シート名:シートID)

やりたいこと

①前回登録したフォルダIDを取得してみる

②対象フォルダ内のシート名とシートIDを取得する

③取得したフォルダ名・IDをスクリプトプロパティに保存する

④どれか1つのスプレッドシート名を取得して登録されているデータを表示する

さて、みていきましょう。

対象となるデータ・フォルダ

こんな感じに同一フォルダに毎月のデータが保存されている場合を前提としています。

各月のスプレッドシートには、こんな感じでどうでもいいデータが入ってます。

1月には”1月だよ”、2月には”2月だよ”って感じでデータが保存してあります。

①〜③までを実現するスクリプト

さて、以下の3つを一気に実現するスクリプトになります。

①前回登録したフォルダIDを取得してみる

②対象フォルダ内のシート名とシートIDを取得する

③取得したフォルダ名・IDをスクリプトプロパティに保存する

実際のスクリプト

function setProperties() {
   //propertyストアを利用するための、propertiesServiceを立ち上げる
   var props = PropertiesService.getScriptProperties();

  //データ保存してるフォルダIDをプロパティストアから取得して、フォルダを指定(①の部分)
   var folderID = props.getProperty("folderID");  
   var targetfolder = DriveApp.getFolderById(folderID);

  //フォルダ内のファイルを取得
   var files = targetfolder.getFiles();

  //whileでファイルが存在する限りpropertyStoreにシート名とシートIDを保存(②と③の部分)
   while(files.hasNext()){
     var file = files.next();
     props.setProperty(file.getName(), file.getId());
   }
 }

フォルダIDをプロパティストアに登録したkeyから取得してきて、対象フォルダのシート名・IDを一括してプロパティストアに追加登録するというのものです。

実行結果

こんな感じでフォルダ内のスプレッドシート全てがプロパティストアに登録されました。

順番は順不同です。

コード解説

プロパティストアに接続するためのオブジェクト立ち上げ PropertiesService.getScriptProperties()

まずはおまじないのように、スクリプトプロパティに接続するために、プロパティサービスを利用します。

//propertyストアを利用するための、propertiesServiceを立ち上げる
   var props = PropertiesService.getScriptProperties();

getScriptProperties()でプロパティストアのデータを取得できるようになります。

プロパティストアから値を取得する getProperty(property)

次は、実際の値を指定して取得するために、先ほど立ち上げたpropから、対象としたいプロパティを指定して、値を引っ張ってきます。

//データ保存してるフォルダIDをプロパティストアから取得して、フォルダを指定(①の部分)
   var folderID = props.getProperty("folderID");

これで、folderIDとして前回手入力した、key:folderIDに対応する値(value)が取得できます。要は結果として、

var folderID = “folderのID”;

というスクリプトを書いたのと同義になります。

プロパティストアに値を登録する setProperty()

プロパティストアにkey:valueを登録する場合は、setProperty(key, value)を利用します。

//whileでファイルが存在する限りpropertyStoreにシート名とシートIDを保存(②と③の部分)
   while(files.hasNext()){
     var file = files.next();
     props.setProperty(file.getName(), file.getId());

今回はシート名をkeyとして、シートIDをvalueとして登録したいので、上記のようになります。当然逆でもできますが、keyで検索するので基本は自分が覚えていられる値をkeyにした方がいいですよね。

④対象:実際のスクリプト(シートIDを月名で指定して、データを表示する)

function getProperties(){
   var props = PropertiesService.getScriptProperties();
  
  //対象月を入力
  var targetM = "2月";
  
  //指定づきをプロパティストアのkeyで検索して、idを取得
   var id = props.getProperty(targetM);

 //シートIDを指定して、データを取得
   var ss = SpreadsheetApp.openById(id);
   var sheet = ss.getSheetByName("main");
   var data = sheet.getDataRange().getValues();
 Logger.log(data);
 }

まぁこちらは最初のフォルダIDを指定する場合と特段変わらないので、参考までに。

実行結果

こんな感じにちゃんとデータが取得できているのがわかります。

まとめ

今回はプロパティストアへGASからアクセスして、値を取得したり、登録したりする方法でした。

同一フォルダ内にあるシートIDを一覧でスクリプトプロパティに登録しておくと、データを引っ張る際に楽になりますね。

もちろん、このようなデータの保存方法をとっていない方もいるかと思いますが、GASで楽をする際には、実はスクリプトの書き方だけでなく、そもそものデータの保存形式(データ自体の作成方法+ドライブ構成の両方)に気をつけるといいかと思います。

さて、次回は配列とかをスクリプトプロパティに入れ込んでいきます。

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

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

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