メニューを作りたい
様々なスクリプトを作っていると、メニューから選択させて実行したくなります。そのシートだけの特別なコマンドを実行するメニューの作り方を調べてみました。
旧メニューの追加方法
わりとネット上にたくさん掲載されているよくあるサブメニューを持たない(というか持てない)メニューの作り方です。新旧両方のバージョンのスプレッドシートで利用することが可能です。
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();
}