Press "Enter" to skip to content

[GAS] 複数のSpreadsheetを制御する [共有]

wyosis 0

やりたいこと

Google Formから回収したデータ(個人データ)を見やすい形にして一覧表にする。ついでに検索機能も付ける。

問題点

シートが集計結果(DB)、検索画面(Search)、結果が出る画面(Result)、結果のフォーマット(Format)ある。システム自体は複数人で共有したいが、DBとResultには個人情報が含まっているのでダウンロードやコピーは禁止にしたい。つまり閲覧限定にする必要がある。一方で、Searchはユーザが入力する必要がある&スクリプトを実行する必要があるため編集者に設定したい。

その上でSearch上から別シートであるDBの情報を読み取り、Resultに出力しなくてはならない。Resultにはユーザは閲覧権限しか与えられていないため、そのままだと書き込みができない。

解決策

まず、最終的な構成は以下のようになった。

・DB Spread Sheet – DB Sheet (共有しない)

・Search Spread Sheet – Search Sheet (編集権限)

Call Script to call “Create Result

・Result Spread Sheet – Result Sheet & Format Sheet (閲覧権限)

Create Result(Webアプリケーション, オーナ権限)

シートごとに権限が異なるのでSpreadsheetごとに分けた。

実際に書き込みをするスクリプトは全てのシートにアクセスできるオーナ権限にすることで解決した。ユーザインターフェースのためにSearchシートにボタンを配置し、そこからWebアプリケーション化したスクリプトを実行する。

ポイントは、

  1. 権限ごとにSpreadsheetを分ける
  2. オーナ権限を与えたWebアプリケーションを作成する

である。こうすることで、共有ユーザに最低限の権限を与えた状態で、シート越しの読み書きが可能になる。

ちなみにWebアプリケーションの呼び出しは以下のように書く。

function callWeb(){
 var url = "https://script.google.com/macros/s/{ユニークID}/exec";
 var response = UrlFetchApp.fetch(url);
 var content = response.getContentText("UTF-8");
}

 

コメントを残す

メールアドレスが公開されることはありません。