目的
Container Bound ScriptsとしてスプレッドシートにGASを組み込んでいるが、そのシートを10ファイルほど複製して使用することになった。
この場合、GASに変更を加える時に10ファイル全て変更しなければならないので
今のうちにStandalone Scriptsに機能を移動し共通化しておきたい。
これが意外と情報が出てこなかったのでメモしておく。
Standalone Scriptsを作成する
Google Driveの任意の場所にGoogle Apps Scriptファイルを作成する。
「右クリックメニュー」 > 「その他」 > 「Google Apps Script」
これがContainerにBoundしていない、Standalone Scriptsとなる。
スプレッドシート上で行いたい処理を上記ファイルに記述し、
各スプレッドシートからはその処理を読み込む形にする。
デフォルトの「コード.gs」にサンプルとして以下の関数を作成した。
function oishiiOniku() {
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadSheet.getSheetByName("シート1");
sheet.getRange(1, 1).setValue("おいしいお肉");
}
関数を作成したので、これをスプレッドシートから読み込むための準備をする。
「メニュー」 > 「ファイル」 > 「版を管理...」
版を管理のダイアログに記載がある通り、
他のスプレッドシートからこのファイルをライブラリとして読み出すためにはバージョンを定義しなければならない。
変更内容を入力して「新しいバージョンを保存」を行うとVer1が定義されるので「OK」を押す。
次にプロジェクトのプロパティを表示し、「スクリプトID」を控えておく。
「メニュー」 > 「ファイル」 > 「プロジェクトのプロパティ」
スプレッドシートに連携する
スクリプトを使用する側のスプレッドシートを立ち上げ、
スプレッドシートからスクリプトエディタを表示する。
続けて、スクリプトエディタからライブラリのダイアログを表示する。
「メニュー」 > 「リソース」 > 「ライブラリ...」
「ライブラリを追加」のところに先ほど控えたスクリプトIDを入力して「追加」を押す。
「バージョン」は版を管理で定義したバージョンに合わせる必要がある。
今回であればVer1にする。当然最新のVer以外を指定することもできる。
また、「識別子」はスクリプトを読み出す際にコードに記述するため、
わかりやすく編集しておくと良い。
oishiiOnikuを実行する
あとは通常通りスプレッドシードのスクリプトとしてoishiiOnikuを読み出す処理を書けば良い。
function myFunction() {
Sample.oishiiOniku();
}
「識別子.関数名」と書いて実行するだけで、無事処理が実行された。
補足
スクリプトのバージョンを更新した場合に、結局すべてのシートで
バージョンを合わせに行く必要があるのでは…?と思ったが、
最新バージョンが定義された場合は自動で追従しているようだった。(詳細未確認)