見出し画像

ひとつのGASを複数ファイルで使い回す


Google Apps Script (GAS) を複数のスプレッドシートファイルに適用して使いまわしたい!と思い、調べたのでまとめます。

1. スタンドアロンスクリプトを作成する

  1. Google Apps Script にアクセスし、新しいプロジェクトを作成。

  2. スクリプトを作成し、保存。

  3. プロジェクトの設定から、スクリプトIDをコピーする。

任意の場所にGASファイルを作成

例: 動作確認のためメッセージボックスを返すサンプル

function test(){
  Browser.msgBox('Hello World!')
}
スクリプトIDを取得

※ちなみにスプレッドシートと紐づけて作成するスクリプトは「コンテナバインド」と呼ばれるらしい。

2. スプレッドシートのGASで呼び出す

  1. 任意のスプレッドシートで拡張機能 > Apps Scriptをクリック。

  2. GAS編集画面でライブラリ「+」をクリック。

  3. 先ほどのスクリプトIDをペーストし検索。

  4. 先ほどのプロジェクト名が出るので、現在のプロジェクトで表示したい名称があれば変更する(基本的に同一がわかりやすいと思う)。※あとからも変更可能

  5. ライブラリ追加時に設定した名前に.を続けてスタンドアロンスクリプトの関数を呼び出すことができる。(サンプル参照)

Sample: 呼び出しの実行確認
(何も起こらないfake関数もついでに)

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('test(ライブラリ)', 'StandAloneProject.test');

  // メニューを画面に追加する
  menu.addToUi();
}

function fake(){
  //何も起こらない
}

3. 補足

ActiveSheetの挙動

ちなみに、連携するスプレッドシートはIDで紐づけておくほうがよさそうだが、下記のようにActiveSheetの書き方で、現在開いているシートを取得してくれるので、これが取り回しもよく便利。

function test2(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(1,1).setValue('test');
}

google.script.runの挙動

HTMLモーダルを開いて、そこで設定したテーブルデータをスプレッドシートに返す、というスクリプトを作ろうとした。
HTMLファイルとモーダルウィンドウの表示関数はスタンドアロンプロジェクトから可能。その後、HTMLから値を返してスクリプトを実行する際に、google.script.runを使えば呼び出せるが、これで呼び出せるのはコンテナバインドのスクリプトに限られる模様。


いいなと思ったら応援しよう!