様々なスクリプトを作っていると、メニューから選択させて実行したくなります。そのシートだけの特別なコマンドを実行するメニューの作り方を調べてみました。
わりとネット上にたくさん掲載されているよくあるサブメニューを持たない(というか持てない)メニューの作り方です。新旧両方のバージョンのスプレッドシートで利用することが可能です。
function onOpen(e) { var ss = SpreadsheetApp.getActive(); var items = [ {name: '1番目のメニュー', functionName: 'myFunction1'}, null, // セパレーター. {name: '2番めのメニュー', functionName: 'myFunction2'} ]; ss.addMenu('自分用メニュー', items);}addMenuメソッドを使って作成します。Google Developerのそのまんまのコードですが。
addMenuではメニュー名。そして、その中身では1番目2番めとメニューと関数名を割り当てて行きます。区切り線はnullと入れれば、区切り線が入ります。非常にシンプルなのですが、サブメニューの追加ができないので、今後はメジャーな方法ではなくなるでしょう。
いろいろなサイトを回っても、あまり記載されていませんが、メニューは別に1つと決まってるわけじゃありません。2つでも3つでも作ることが可能です。サブメニューが作れない分、複数個のメニューを用意して、中身を分けて上げれば、今までよりも使いやすくなるのは間違いないです。
function onOpen() { var SS = SpreadsheetApp.getActiveSpreadsheet(); var menu1 = [ {name: "富士山", functionName: "fujiyama"}]; var menu2 = [{name: "箱根山", functionName: "hakone"}]; SS.addMenu("メニュー1", menu1); SS.addMenu("メニュー2", menu2);}こういった形で、2つのメニューが登録出来るはずです。それぞれには1個ずつ、富士山と箱根山というメニューが入っているといった感じです。
Googleスプレッドシートの新バージョンからは、サブメニューが使えるようになっています。また、メニュー追加用のメソッドは一新されており、よりわかりやすく書けるようになっています。
function onOpen(e) { var ui = SpreadsheetApp.getUi(); // Or DocumentApp or FormApp. ui.createMenu('自分用メニュー') .addItem('銀ちゃん', 'gintoki') .addSeparator() .addSubMenu(ui.createMenu('2個めのメニュー') .addItem('サブちゃん', 'isaburou')) .addToUi();}これまたGoogle Developerからの丸パクリですが。
Uiを用いたメソッドのようで、旧式のメニュー追加の方法と同居ができます。自分用メニューに2つのメニューと2個めのメニューにはサブメニューが1個入っています。区切り線は.addSeparator()で設定するようになっています。今後はこちらのやり方が主流になっていくでしょうが、Google Apps for Businessでは、最新版にしていない場合使えないです。
また、2個目のメニューを設置したいのだが・・・・という人は、そのまんまもう一個コードを掛けば良いです。下記のようなコードを記述すれば、メニューバーに【普通のメニュー】 と 【取扱説明書】の2つが出てくるようになります。
function onOpen() { var ui = FormApp.getUi(); ui.createMenu('普通のメニュー▼') .addItem('Fromのタイトル設定', 'titlenameman')・・・・・ 中略 ・・・・・ .addToUi(); ui.createMenu('取扱説明書▼') .addItem('マニュアル表示', 'helpman') .addToUi(); }