前回までの流れ
プロパティストアに手入力で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キーやマジックナンバーなどの保存に適していますので是非お試しください。
- GASでプロパティストアを利用してみる〜その1 概要〜
- GASでプロパティストアを利用してみる〜その2 プロパティストアにアクセスして値を取得・登録する〜
- GASでプロパティストアを利用してみる〜その3 利用制限(上限)について〜
- GASでプロパティストアを利用してみる〜その4 配列を値として登録する〜

