libro
www.tuyano.com
初心者のためのGoogle Apps Scriptプログラミング入門

フォームとウェブアプリケーション (5/7)

作成:2011-06-29 08:07
更新:2011-11-04 16:03

■GUI ビルダーの画面をWeb上に公開する

では、簡単なサンプルを作成しましょう。まずはスクリプトエディタからGUI ビルダーを起動し、適当に画面を作ってください。Labelを配置してテキストを表示するような、シンプルなものでかまいません。GUIの名前は、デフォルトの「MyGui」のまま保存しておきましょう。

作成したら、スクリプトエディタで、下のリスト欄に掲載した関数を作成します。ただし! 注意すべきは★マークの文です。ここで、引数に"tf8KcgyFGd……"と指定してありますが、これはダミーです。自分のスプレッドシートのIDに書き換える必要があります。

スプレッドシートのページに切り替えて、アドレスをよく見てみましょう。こんな具合になっていることがわかります。
https://spreadsheets0.google.com/spreadsheet/ccc?hl=ja&key=〇〇&hl=ja
パラメータのクエリーテキスト部分に、「key=○○」という値が見えるはずです。この「○○」が、このスプレッドシートに割り振られたIDです。この値を、★マークの文の引数に指定してください。

スクリプトができたら、<サービスとして公開...>メニューを選び、サービスを有効にします。このとき、使用の制限は「全員に~」ラジオボタンを選択し、「匿名での~」チェックボックスはOFFにします。これで、Googleアカウントでログインした人間だけが利用できるようになります。

最後に、スプレッドシートの1枚目のシートを開き、A1タグに「1」と記述してください。これで完成です。――が、まだ使ってはいけませんよ。スクリプトエディタの<実行>メニューからdoGetを実行してみてください。画面に「承認が必要です」というタイトルの警告が表示されるはずです。これは、スクリプト内からスプレッドシートの読み書きを行うための許諾設定を行うものです。「承認」ボタンを押すと、これらの処理を許可し、スクリプトが実行できるようになります。

では、公開されたアドレスに実際にアクセスしてみましょう。GUI ビルダーで作った画面が表示されます。これを確認したら、スプレッドシートに切り替えてみてください。シートに、アクセスした日時とログインしたアカウントのメールアドレスが保存されているはずです。

ここでは、doGetでGui ビルダーの画面をロードし、それからスプレッドシートを開いてA1セルの値をとり出し、それをもとに指定の行にアクセスしたユーザの情報を書きこむ、という作業をしています。順に整理していきましょう。
var app = UiApp.createApplication();
まず、UiAppの「createApplication」を呼び出し、UiInstanceオブジェクトを新たに生成します。続いて、このappに、GUIデータをロードし組み込みます。
app.add(app.loadComponent("MyGui"));
loadComponent」は、引数に指定した名前のGUIデータをロードしオブジェクトとして返すものです。こうして取得したGUIのオブジェクトを、addUiInstanceに追加します。――続いて、スプレッドシートを開きます。
var sheets = SpreadsheetApp.openById("tf8KcgyFGd……");
var sheet = sheets.getSheets()[0];
openById」は、引数に指定したスプレッドシートを開くメソッドです。これでSpreadsheetオブジェクトが取得されますので、ここからgetSheetsで全Sheetを取得し、その1枚目を変数sheetに取り出しておきます。

後は、既に行った「シートのセルの値の読み書き」を行うだけです。ここでは、ログインしたユーザのメールアドレスを書きだしていますが、これは以下のようにして取り出すことができます。
var usr = Session.getActiveUser().getEmail();
Session」は、文字通り、現在の接続のセッションに関する情報を管理するオブジェクトです。「getActiveUser」は、ユーザーに関する情報を管理する「User」オブジェクトを返すメソッドです。このUserオブジェクト内には、ログインされたユーザに関する情報を得るためのメソッドとして、「getEmail」「getUserLoginId」といったメソッドが用意されています。これらを呼び出すことで、ログインユーザのメールアドレス及びログインIDを取得することができます。

これで、基本的な処理は終わりました。が、最後に忘れてはいけないのが、「return app;」です。処理が終わったら、最後にUiInstancereturnしなければいけません。これにより、受け取ったオブジェクトを元に表示されるページなどが生成されるのです(UiInstanceに、loadComponentしたGUIオブジェクトをaddしておいたことを思い出しましょう)。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function doGet(e){
	var app = UiApp.createApplication();
	app.add(app.loadComponent("MyGui"));
	var sheets = SpreadsheetApp.openById("tf8KcgyFGd……"); // ★
	var sheet = sheets.getSheets()[0];
	var count = sheet.getRange(1,1).getValue() * 1;
	count++;
	var t = new Date();
	var usr = Session.getActiveUser().getEmail();
	sheet.getRange(count,1).setValue(t);
	sheet.getRange(count,2).setValue(usr);
	sheet.getRange(1,1).setValue(count);
	return app;
}

※関連コンテンツ

「初心者のためのGoogle Apps Scriptプログラミング入門」に戻る