gasスクリプトを別のシートから呼び出すには?

GAS Script
この記事は約5分で読めます。

スプレットシートが増えてくると別のシートで同じ作業をすることも増えてきます。

定形作業などいちいち入力したりするのは無駄ですし意外と大変ですよね。

そんなときに重宝するのが GAS スクリプトの呼び出し(GAS 共通化)です。

gas スクリプトを共有する

gas スクリプトを共有設定しておけば後からスクリプトを変更しても共有設定しているスプレッドシート全てに反映されるので変更は一度で済みます。

カズは呼び出されるスクリプトをmasterとして別にテンプレートファイルを作成しています。

このテンプレートファイルに共有設定しておけばテンプレートをコピーして使っても新たにスクリプトを書き込んだり共有設定などしなくて済むので便利です。

呼び出し先となるスクリプトをgoogleでは『ライブラリ』と呼んでいます。

この『ライブラリ』に呼び出すスクリプトの共有設定をするということですね。

参照されるファイル

googleドライブの『新規』をクリックして新しいスプレットシートを作成します。

ここではイメージとして判りやすいように『本社』と命名しました。^^;

『本社のスプレットシート』のツール ⇒ スクリプトエディタと進んでApps Scriptを開きます。

『無題のプロジェクト』となっていますので適当な名前を付けておきます。

ここでも判りやすいように『honsya』としました。 ^^;

title :『 gasスクリプトを別のシートから呼び出すには? 』画像説明文 :『本社のスプレットシート』のツール ⇒ スクリプトエディタと進んでApps Scriptを開きます。『無題のプロジェクト』となっていますので適当な名前を付けておきます。ここでも判りやすいように『honsya』としました。 ^^;

参照するファイル

次に同様にドライブの『新規』からスプレットシートを作成します。

ここでは判りやすいように『支社』としました。

支社から本社に問い合わせるっていうイメージです。

テストとして『支社』のセル”A1″ に ”今”と入力したら何か返答があるようにしてみます。

スクリプトの記入

『honsya』のスクリプトエディタで『支社』から”今”と入力があったら何か返答を返すようなスクリプトを書いてみます。

const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getActiveSheet();
function toiawase() {
if(sheet.getRange(1,1).getValue() == "今"){
Browser.msgBox("TVを見ています");
}
}
function onEdit(e) {
let e_value = e.range.getValue();
if(e_value == "今"){
toiawase();
}
}

最初の2行はおまじないです。 ^^;

functionの外部に記入すると全てのスプレッドシートで使えるので記入は一度で済みます。

const としてあるので代入は出来ませんね。

let はfunctionで記述された中でのみ有効です。

”シートのA1に”今”と入力されたら”TVを見ています”と返すスクリプトです。

onEdit は変更されたセルの情報を返す便利なスクリプト関数です。

同じような動作をする関数としてトリガーの設定がありますがこのトリガーはコピーしたシートでは動作しません。

トリガーの記述欄は空白になりますのでカズはonEditを好んで使っています。

シート名とセルを指定することで誤動作を防ぐ事が出来ますので便利です。

ここではシートをアクティブなシートとしていますのでどのシートのA1セルでも動作します。 ^^;

実際に使うにはシート名を指定したり条件をつけるといいですね。

title :『 gasスクリプトを別のシートから呼び出すには? 』画像説明文 :onEdit は変更されたセルの情報を返す便利なスクリプト関数です。同じような動作をする関数としてトリガーの設定がありますがこのトリガーはコピーしたシートでは動作しません。トリガーの記述欄は空白になりますのでカズはonEditを好んで使っています。シート名とセルを指定することで誤動作を防ぐ事が出来ますので便利です。ここではシートをアクティブなシートとしていますのでどのシートのA1セルでも動作します。 ^^;実際に使うにはシート名を指定したり条件をつけるといいですね。

ライブラリの設定

『本社』のシート”A1″に”今”と入力したら”TVを見ています” と返って来ればOKです。

新しいエディタは見やすいのですが,ウエブアプリケーションなどにする機能はあえて?つけられていません。

そこで『honsyaエディタ』右上にある小さな文字『以前のエディタを使用』をクリックして旧バージョンに戻します。

『何で新しいエディタを使わないの?』とか聞いてきますので『メニューがない』とかにチエックして以前のエディタに変更します。

title :『 gasスクリプトを別のシートから呼び出すには? 』画像説明文 :新しいエディタは見やすいのですが,ウエブアプリケーションなどにする機能はあえて?つけられていません。そこで『honsyaエディタ』右上にある小さな文字『以前のエディタを使用』をクリックして旧バージョンに戻します。

公開 ⇒ 『ウエブアプリケーションとして導入』をクリック。

プロジェクト バージョン ⇒ 新規

App ⇒ Me(メールアドレス)

Who has ⇒ Only myself

このように選択して次に進みます。

title :『 gasスクリプトを別のシートから呼び出すには? 』画像説明文 :そこで『honsyaエディタ』右上にある小さな文字『以前のエディタを使用』をクリックして旧バージョンに戻します。公開 ⇒ 『ウエブアプリケーションとして導入』をクリック。プロジェクト バージョン ⇒ 新規App ⇒ Me(メールアドレス)Who has ⇒ Only myselfこのように選択して次に進みます。

このアカウントは確認されていません!と警告表示が出ますので左下の小さな文字『詳細』をクリックします。

次に『安全でないページに移動』をクリック。

次のダイアログで『許可』⇒『OK』をクリック。

ここまでの作業で他のスプレッドシートからのアクセスを受け入れるようになりましたので新しいエディタに戻してもOKです。^^;

次に、エディタのメニュー 『ファイル』⇒ 『プロジェクトのプロパティ』をクリック。

プロパティダイアログの中にあるスクリプトIDをコピー(Ctrl+c)します。(IDはサンプル)

title :『 gasスクリプトを別のシートから呼び出すには? 』画像説明文 :このアカウントは確認されていません!と警告表示が出ますので左下の小さな文字『詳細』をクリックします。次に『安全でないページに移動』をクリック。次のダイアログで『許可』⇒『OK』をクリック。ここまでの作業で他のスプレッドシートからのアクセスを受け入れるようになりましたので新しいエディタに戻してもOKです。^^;次に、エディタのメニュー 『ファイル』⇒ 『プロジェクトのプロパティ』をクリック。プロパティダイアログの中にあるスクリプトIDをコピー(Ctrl+c)します。

参照(共有)設定

次に『支社』側の設定です。

『支社』のエディタから『ライブラリ』右の をクリックしてライブラリを追加します。

title :『 gasスクリプトを別のシートから呼び出すには? 』画像説明文 :次に『支社』側の設定です。『支社』のエディタから『ライブラリ』右の +をクリックしてライブラリを追加します。

スクリプトIDの欄に先程コピーしたIDを貼り付け(Ctrl +v)して、検索をクリック。

『honsya』が表示されていればOKです。

ここで追加したライブラリの名称は変える事ができます。

その場合にはエディタ側の記述では変更したライブラリ名で記述します。

ここではライブラリ名を『honsya』としています。

次にコードを記述します。

function onEdit(e){honsya.onEdit(e)}

この一行をコードgsに貼り付け、保存します。

支社のシート”A1″ に”今”と入力してみてください。

このようになれば『支社』側で『本社』のスクリプトを呼び出しています。

title :『 gasスクリプトを別のシートから呼び出すには? 』画像説明文 :次にコードを記述します。この一行をコードgsに貼り付け、保存します。支社のシート”A1

『gasスクリプトを呼び出す』まとめ

スクリプトを呼び出す側とスクリプトを呼び出される側、カズはmasterシート側にはスクリプトのみを記述し、テンプレートファイルにライブラリを導入しています。

このようにすることでスクリプトの管理が楽になり、テンプレートの使い回しが出来るようになります。

何か問題があれば全ては『本社』が悪いのです。^^;

だって…

本社の人って今、「TVを見ています」からね。^^;

タイトルとURLをコピーしました