GASでスタンドアロンスクリプトを作成して複数のスプレッドシートから利用する

スプレッドシートに埋め込む形のコンテナバインドスクリプトではなく、複数のスプレッドシートから呼び出したくなったので。

こちらの記事、まるっとそのままですが備忘で書いておきます。
teratail.com

MyDriveから新規作成

スタンドアロンは「マイドライブ」の「新規」>「その他」>「Google Apps Script」から作成。

f:id:hiro-29:20220405165755p:plain

スクリプトの保存

「コード.js」の中にスクリプト本体を書いて、「無題のプロジェクト」のところを変更します。(これが日本語だと呼び出し時に上手くいかないらしい?)
f:id:hiro-29:20220405174623p:plain

もちろんスクリプトは「保存」します。
※これ忘れると、意外とキャッシュが残っている感じになって上手くいかなかったりする。
※余談ですが最近のアプリの「離脱したら勝手に保存してくれる」機能のせいか変更を明示的に保存しないことで困ったことが何度かある…よくない。

デプロイ

この時点ですでに連携用の「スクリプトID」が発行されているようなので、おそらくこのままでも権限周りが問題なければ連携できると思われます。
今回はちょくちょく修正がかかる予定なのでデプロイします。(動作確認してませんが、これしないと保存した瞬間に変更が反映されてしまうのだと思われる)

右上の「デプロイ」>「新しいデプロイ」
f:id:hiro-29:20220405170759p:plain

種類を「ウェブアプリ」で選択し、権限周りを設定して「デプロイ」
f:id:hiro-29:20220405172120p:plain

スクリプトIDをコピーする

左カラムの「プロジェクトの設定」>「スクリプトID」をコピーしておく。
f:id:hiro-29:20220405173752p:plain

呼び出し側でスクリプトIDを連携

使いたいスプレッドシートを開いて「拡張機能」>「Apps Script」。
f:id:hiro-29:20220405172255p:plain

左カラムの「ライブラリ」の「+」から新規追加します。
さきほどの「スクリプトID」を入力>「検索」すると、以下のように表示されます。
一番下の「ID」に、ここでさきほど上記で入力したプロジェクト名が表示されればおそらくOK。
f:id:hiro-29:20220405174121p:plain
(自分はここで「保存」忘れで何度も「「appsscript.json」のエラー: サービス ID は空にできません」のエラーで「ID」にプロジェクト名が表示されないという事態に陥ってました…。保存しようね。)

呼び出し側のコンテナバインドスクリプトを作る

コードはこれだけでOK。
さきほど英数字で保存した「プロジェクト名.メソッド();」でコールできます。

function myfunction() {
  StandaloneScript.MainMethod();
}

自分はもともとコンテナバインドで作成したスクリプトスタンドアロン化したのですが、getActiveSheet などのローカルでしか正しく動かなさそうなメソッドもそのまま使えました。ラッキー。


本家ガイドはこちら。
developers.google.com