どんぐりでもわかるGoogle Apps Script の GUI Builder の使い方

MS AccessVBAと日々格闘中、パラダイムシフトはいつ来るのかと情報収集にいそしんでた所、
先日のGoogle I/O 2011 で発表された Google Apps Script(GAS)のGUIビルダーなる物を発見。
Accessのフォームの代替となるか!?

作ってみる

Google ドキュメントからスプレッドシートを新規作成して、スプレッドシートのメニューから「ツール」→「スクリプトエディタ」を選択



スクリプトエディタのメニューから「ファイル」→「ユーザーインターフェースを構築」を選択



するとGUIビルダーが起動する。
ためしにTextBoxとButtonを1つずつ貼り付けてみる。
Saveボタンを押すと保存される。名前はMyGuiのままにする。



一端スクリプトエディタに戻って、イベントハンドラ用の関数や実行用の関数を作る。
こんな感じで作成

//サービス起動時
function doGet(e) {
  var app = UiApp.createApplication();
  //ここでGUIビルダーで保存したコンポーネントを呼び出す
  app.add(app.loadComponent("MyGui")); 
  return app;
}

//スプレッドシートオープン時
function onOpen() { 
  var doc = SpreadsheetApp.getActiveSpreadsheet(); 
  //ここでGUIビルダーで保存したコンポーネントを呼び出す
  var app = UiApp.createApplication(); 
  app.add(app.loadComponent("MyGui")); 
  doc.show(app);  
}

//イベントハンドラ
function hoge(e) { 
  var app = UiApp.getActiveApplication();
  //メールアドレス表示
  app.getElementById("TextBox1").setText(Session.getActiveUser().getEmail());
  return app;

}



最初、ここで作ったレイアウトどうやって呼び出したらいいのか謎だったけど、ヘルプフォーラム見たら書いてあった。
ポイントはGUIビルダーで作成したレイアウトを呼び出す箇所で

app.loadComponent("MyGui")

で、呼び出せる。ここの引数でGUIビルダーで保存した名前を指定する。


最後にトリガーでスプレッドシートオープン時の関数を紐づけておいて、保存。スクリプト名はtestに。



その後、GUIビルダーでボタンのクリックイベントに関数を紐づける。
イベントハンドラへの割り当ては、コンポーネント選択して右の方に出てくるプロパティで紐付けする。
GUIビルダーで、ボタンを選択すると右側にプロパティが表示されるので、下の方にあるEventsのOn Mouse Clickにイベントハンドラ(今回はhoge関数)を紐づける。


再度保存して完成

実行してみる(スプレッドシート

スプレッドシートに戻って、一端スプレッドシートを保存。再度開き直すと出てきたーーー



ボタン押すと、メールアドレスがテキストボックスに表示されます。

実行してみる(サービス)

ちなみに、スクリプトエディタから、サービスとして公開することもできる。
スクリプトエディタのメニューから「共有」→「サービスとして公開」を選択



公開範囲を選択してサービスを有効にするにチェック。URLもコピーしておく。



URLをコピーして貼り付けると出てきたーーー



ちなみに、匿名アクセスOKで公開するとこんなのが出る


所感

spreadsheetの入力補助用に使うのがいいのかね、とりあえずは。
addCallbackElement がどうもGUIビルダー上でできないっぽいので、ボタンのイベント時に他のコンポーネント(TextBox等)の値がとれない?何か設定方法あるのかな。
まだ最低限の機能しかないみたいなので、これからのバージョンアップに期待!そのうちChoromebookで全部開発まで出来るようになれば、簡単な業務用APなんか全部MS Accessから置き換わっちゃうような気もする。