Google Apps Scriptでスプレッドシートに独自のメニューを追加する方法


add-menu

photo credit: rafiq s Lana 274/365 via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptを使ってメルマガ配信システムを作るシリーズです。

前回の記事はコチラ。

Google Apps Scriptのメルマガ配信スクリプトを高速化する
Google Apps Scriptを使ってメルマガ配信システムを作成しています。今回は、スプレッドシートのAPI呼び出し回数を抑えることで、メルマガ配信クリプトの高速化を図ります。

というか、もうメルマガ配信システムとしてはだいぶ完成していますね。

ですが、このメルマガシステム、スクリプトエディタからしか実行ができないというユーザビリティ的には致命的な欠点があります。

でもご安心下さい。大丈夫です。

今回、Google Apps Scriptでスプレッドシートに独自のメニューを追加する方法をお教えしますので。

onOpenイベントハンドラaddMenuメソッドというものを使いますよ。

では、行ってみましょう!

スポンサーリンク

メルマガシステムのおさらいと今回やりたいこと

ちょっとおさらいです。

スプレッドシートにメルマガの宛先リストを用意していまして「配信先リスト」です。

Google Apps Scriptのメルマガシステムの配信先シート

隣の「Contacts」には名刺管理アプリ「CAMCARD」からエクスポートしたデータを貼り付けて、前回作成した「inportContacts2」というスクリプトを実行すると、宛先リストが最新に更新される仕組みになっています。

で、そのリストの全てに対してメールを送るスクリプトが「sendMail」ですね。以下の記事で紹介しています。

たったの28行!Google Apps Scriptで超簡易メルマガ配信システム
Google Apps Scriptで超簡易メルマガ配信システムを作成しています。今回はいよいよスプレッドシートのアドレス宛にドキュメントの本文をGmailで送信する処理を追加していきます。

まとめますと

  • メール送信:sendMail
  • 配信リスト更新:inportContacts2

という二つのスクリプトで構成されているわけですね。

それでこの二つを、スプレッドシートに独自メニューとして追加したい、というのが今回の目的となります。

スプレッドシートを開いたときに実行するイベントハンドラonOpen

独自メニューを実現するために、onOpenというイベントハンドラを使います。

イベントハンドラというのは、何らかのイベントに応じて処理を実行してくれる機能で、onOpenはその名の通りスプレッドシートを開いたときに実行されます。

実行させたい処理は、他のfunctionを作るのと同様に

function onOpen(){
  //処理
}

と記述します。これで、onOpen内の処理がスプレッドシートを開いたときに自動で実行されます。

例えば、以下のように書けば

function onOpen(){
  Browser.msgBox("Hello!");
}

スプレッドシートを起動時に

Google Apps ScriptのonOpenイベントハンドラでメッセージを表示

というメッセージが表示されます。ちなみに、リロードでも起動しますので、いちいちスプレッドシートのタブを閉じなくても大丈夫ですよ。

スプレッドシートに独自メニューを追加する

このイベントハンドラonOpenを使って、独自メニューを追加していきましょう。

要はスプレッドシートが開いたときに「メニューを追加してね」という処理を実行すればよいわけです。

addMenuメソッドでスプレッドシートにメニューを追加する

スプレッドシートにメニューを追加する場合は、Spreadsheetオブジェクトに対してaddMenuメソッドを実行します。

書き方はこうです。

Spreadsheetオブジェクト.addMenu(メニューの表題, 追加するメニューの配列)

メニューの表題は、「ファイル」とか「編集」の並びに表示するテキストになります。今回の場合は例えば「メール」などとすればOKですね。

追加するメニューの配列ですが、一つ一つの要素は、メニュー名と呼び出す関数をセットにして以下のように指定します。

{ name: メニュー名, functionName: 呼び出す関数名 }

なお、この代わり単にnullと指定をすると、その位置に区切り線が入ります。

例えば、以下のように指定するということですね。

[
     { name: "メニュー名1", functionName: "呼び出す関数名1" },
     null,
     { name: "メニュー名2", functionName: "呼び出す関数名2" },
]

この例では、メニュー名1とメニュー名2の間に区切り線が入るようなメニューの配列となります。

メルマガシステムに独自メニューを追加する

さて、今回の場合ですがonOpenは以下のように書けばOKです。

function onOpen(){

  //メニュー配列
  var myMenu=[
    {name: "メール送信", functionName: "sendMail"},
    {name: "配信リスト更新", functionName: "inportContacts2"}
  ];

  SpreadsheetApp.getActiveSpreadsheet().addMenu("メール",myMenu); //メニューを追加

}

スクリプトを保存して、スプレッドシートをリロードしてみますと

Google Apps ScriptのAddMenuメソッドで独自メニューを追加

バッチリ独自メニューが追加されていますね。便利です!

まとめ

Google Apps ScriptでイベントハンドラonOpenを使ってスプレッドシートに独自メニューを追加する方法をお伝えしました。

若干addMenuメソッドの記述方法が小難しく見えるかも知れませんが、ルール通りに落ち着いて書けば問題ないと思います。

今回のテクニック、使いどころがたっくさんあると思いますので、ぜひご活用下さい!

さて、しばらく何回かの記事に分けてお伝えしてきた、Google Apps Scriptによるメールマガジン配信システムですが、いったんこれにて完成とさせて頂ければと思います。

Google Apps Scriptでは様々なGoogleサービスを操作できますので、引き続き皆さんのお仕事に役立つツールについて紹介できればと思います。

連載目次:Google Apps Scriptでメルマガシステムを作っちゃおう!

Google Apps ScriptでGmail、スプレッドシート、ドキュメントを連携させて操作することでメルマガシステムが簡単に実現できます。思ったより2割くらい簡単にできますよ。ちなみに無料です…さすがGoogle。
  1. 初心者でも簡単!Google Apps ScriptでGmailを操作してメールを送る方法
  2. 初心者でも簡単!Google Apps Scriptでドキュメントを取得して表示する方法
  3. Google Apps Scriptでスプレッドシートのリストをもとに宛名を差し込んだメール本文を作る
  4. たったの28行!Google Apps Scriptで超簡易メルマガ配信システム
  5. Google Apps Scriptのメルマガ配信リスト自動更新スクリプトを高速化する

コメント

  1. tanaka より:

    “`
    functin onOpen(){
      //処理
    }
    “`
    functionがfunctinになっていましたので、コメントさせていただきました。

    • tanakaさん

      ご指摘ありがとうございます!
      たいへん助かります…!
      修正させていただきました。

      今後とも当ブログをどうぞよろしくお願いいたします。

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