LoginSignup
1
0

More than 3 years have passed since last update.

GAS DeveloperMetadata【3月20日修正】

Last updated at Posted at 2020-03-18

とある理由で、PropertiesやCache以外でデータを保存する方法を検討しました
MetadataFinderを使わないと見つけられないのでソース修正しました

1.PropertiesとCache

どちらも、そのスクリプト内でしか利用できないんですね。
なんでこんな話になったかというと、

スプシAのスクリプトから、スプシBのスクリプトへデータを渡す

をやりたかったのですが、Propertiesは

let props = PropertiesService.getScriptProperties();
props.setProperty("key","value");

なので、スプシAのスクリプトからプロパティを呼び出すと、当然、スプシAのスクリプトのプロパティとなり、スプシBのスクリプトのプロパティをとることはできません
(設定も同じ)

Cacheも同じ構成をとっているので、こちらも同一スクリプトなり同一ドキュメント内に限定されます。
ユーザープロパティを使えばできるのかもしれませんが、別なユーザーでも動かしたい、と。

2.DeveloperMetadata

クラスリファレンスをつらつら見ていたら、Metadataというものがあるようで、スプシやレンジ等に設定できる模様。
正しい使い方か微妙でしたが、スプシのMetadataに渡したいデータを埋め込んでみました
埋め込む側

b.js
    let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    let meta = spreadsheet.createDeveloperMetadataFinder().withKey("my_Meta_key").find();    
    let value = meta.find(item => item.getKey() == "my_Meta_key");
    if(value === undefined){
      spreadsheet.addDeveloperMetadata("my_Meta_key","my_Meta_Value");
      return "my_Meta_value";
    }
    return value.getValue();

読み込む側

a.js
    let spreadsheet = SpreadsheetApp.openById("B_fileId");
    // let meta = spreadsheet.getDeveloperMetadata();
    let meta = spreadsheet.createDeveloperMetadataFinder().withKey("my_Meta_key").find();
    let value = meta.find(item => item.getKey() == "my_Meta_key");
    if(value === undefined){
      return "no meta-data";
    }
    return value.getValue();

3/20追記:MetadataFinderを使わないと見つけられないので修正

3.ScriptId

実は、スクリプトのIDを集めるために上記のことをやるハメになったのですが、ScriptIdも

let scriptId = ScriptApp.getScriptId();

なので、自分のスクリプトIDしかわからないようです。

4.Metadataのスコープ

スコープ、がただしい表現か微妙ですが、以下の3つにMetadataは設定できるようです
Spreadsheet
Sheet
Range

すべて、
addDeveloperMetadata
で作成できるようになっています。

5.DeveloperMetadata

私のGoogle力がたりないのか、ほとんど情報みつからなかったんですが、だれも使わないのでしょうか。
普通は、Propertiesで足りるからかもしれません
(スプレットシートのシートに直に書く、という方法もレガシーながらあり)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0