前回までの流れ
プロパティストアに手入力で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キーやマジックナンバーなどの保存に適していますので是非お試しください。