【GAS】Google Apps Script で別のスプレッドシートのスクリプトを実行する方法

  • 2021年6月11日
  • 2021年8月20日
  • GAS
  • 1367View

はじめに

あるスプレッドシートで作成したGASプログラムを別のスプレッドシートで実行する方法を紹介します。

具体的には「スプレッドシートA」のスクリプトから「スプレッドシートB」のスクリプトを実行するイメージになります。

 

実行される側プログラムの作成

スプレッドシートの作成

ご自身のGoogle Driveにアクセスをして新規作成からスプレッドシートを作成します。

新規」か「右クリック」でメニューを出し、「Googleスプレッドシート」をクリックしてください。

スプレッドシートの名称をわかりやすくしておきます。

スクリプトの作成

スプレッドシートを作成したらスクリプトエディタを起動します。

上部のメニューから「ツール」をクリックし「スクリプトエディタ」をクリックしてください。

function appendRowData(Data){
  let SH = SpreadsheetApp.getActiveSheet();
  SH.appendRow(Data);
}

function deleteLastRow(){
  let SH = SpreadsheetApp.getActiveSheet();
  SH.deleteRow(Data);
}

上記のコードをコピペしてください。こちらのコード自体は、スプレッドシートにデータを追加する関数と、一番下の行を削除する関数になります。

テストとしてこの関数を作成しておりますので、運用する際には自由に作り替えてください。

スクリプトIDの取得

スクリプトの保存が完了したら左側メニューの「歯車」をクリックしてください。

表示されるものの中から「ID」という項目を探し、「コピー」ボタンを押して、スクリプトIDをコピーしてください。

実行する側のプログラムの作成

スプレッドシートの作成

先ほどと同様に、ご自身のGoogle Driveにアクセスをして新規作成からスプレッドシートを作成します。

新規」か「右クリック」でメニューを出し、「Googleスプレッドシート」をクリックしてください。

スプレッドシートの名称をわかりやすくしておきます。

スクリプトのインポート

上部のメニューから「ツール」をクリックし「スクリプトエディタ」をクリックしてください。

左側のメニューから「ライブラリ +」をクリックしてください。

スクリプトIDを入力するボックスに、先ほどコピーしたスクリプトIDをペーストしてください。

続いて「検索」をクリックしてください。

バージョン」と「ID」という項目が追加されます。

バージョンとは、スクリプトのデプロイバージョンになります。今回の場合は、デプロイを行っていないため、最新の状態が有効となる「HEAD」が選択されます。

ID自体は、プログラムを呼び出す際の識別子のようなものです。次で説明をします。

設定が完了したら「追加」ボタンをクリックしてください。

スクリプトの作成・実行

スクリプトエディタのコード入力部分に先ほど設定したIDを入力してください。

今回の場合は「B」をIDとしたため、それを入力すると、使用可能な関数がサジェストされます。

function myFunction(){
  B.appendRowData(["test1","test2"]);
  B.appendRowData(["test3","test4"]);
  B.deleteLastRow(Data);
}

上記のコードをコピペしてください。ここでのポイントは「先ほど指定したID.関数」で別のスプレッドシートで作成した関数を実行できるという点です。

こちらを実行してください。Google Apps Script を実行した際に承認を求められますので、こちらを参照して許可をしてください。

関連記事

承認はどこで求められる? Google Apps Script をスクリプトエディタでコーディングし、実行する際に求められます。 Google Apps Script のみで完結する処理では承認は求められませんが、スプレッドシートや[…]

実行結果の確認

実行する側のスプレッドシートを確認すると、実行した結果出力されています。

ここで、B(実行される側)のシートに実行結果を出力をしたい場合は、B(実行される側)のプログラムを次のように変更します。

function appendRowData(Data){
  let SH = SpreadsheetApp.openById("ID").getActiveSheet();
  SH.appendRow(Data);
}

function deleteLastRow(){
  let SH = SpreadsheetApp.openById("ID").getActiveSheet();
  SH.deleteRow(Data);
}

ポイントは getActiveSheet() を使用していない点です。スプレッドシートを指定せずに Active系 のメソッドを用いると、プログラムを実行した側のスプレッドシートを取得してきます。

この特性から、今回のプログラムでは、A(実行する側)のスプレッドシートの結果が出力されました。

上記のコードに変更して B(実行される側)のスプレッドシートを確認します。

実行結果が出力されていれば成功です。

今回紹介したコード以外について

Googleが用意していくれている公式リファレンスを参考にしました。とてもわかりやすいものになっています。

Google Developers

Develop high-quality, cloud-based solutions with ease.…

全編が英語である点や、オブジェクト指向の理解が浅い状態では、うまく利用することが難しいです。

本ブログでは、今後もGoogle Apps Scriptのリファレンスの解説や、学び方・ツール作成について発信していきます。

ご興味ある方はお気に入り登録などお願いします。

最新情報をチェックしよう!