通常、ユーザにメッセージを表示する手法として、メッセージボックス(Browser.msgBoxメソッド)や、ポップアップメッセージ(toastメソッド)を利用しますが、これらのメッセージボックスは大きさも小さいことや、メッセージとして送れる量が限られている点、また、見た目が実にシンプルで複雑なダイアログを作るには向いていません。また、これらは基本的にスプレッドシートでしか利用することが出来ません。他のアプリには実装ができないメソッドです。
そこで、HTML Serviceを利用したリッチなメッセージボックスを使うと複雑なことや、見た目がリッチなメッセージボックスを作成することが可能です。やや難易度の高いものではありますが、ユーザとのやり取りにも使用することができ、また、JavaScriptの処理も記述できる柔軟性があるため、利用価値の高いものと言えます。
呼び出すスクリプト側
function doGet() {
var output = HtmlService.createTemplateFromFile('overlaplist');
var ss = SpreadsheetApp.getActiveSpreadsheet();
var html = output.evaluate();
ss.show(html); //メッセージボックスとしてを表示する
}
表示するHTML側(overlaplist.html)
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<title>重複分析結果</title>
<style>
h1 {font-size:16pt; background:#AAFFAA;padding:5px;}
p {margin:10px;}
</style>
</head>
<body>
<h1>重複している項目一覧</h1>
<p>
<?
output.append(viewovlap);
?>
</p>
<div align="center">
<input type="button" value="メッセージを閉じる"
onclick="google.script.host.close()" />
</div>
</body>
</html>
書き方であるが、今回はあらかじめ別のプロシージャ側にHTMLタグ付きの値を格納しておいてあるケースをもって説明する。
今回のスクリプトは、プロジェクトプロパティに設定値を保存するようにしている為、冒頭ではそれを呼び出し、テキストボックスの値をそこに保存するようにしています。
function tomailset(){
var ui = FormApp.getUi();
var tomail = ScriptProperties.getProperty("mail");
var re = ui.prompt("受注する人のメールアドレスを入力してください。\n現在設定されているメールアドレスは【" + tomail + "】です。",
ui.ButtonSet.OK_CANCEL);
switch(re.getSelectedButton()){
case ui.Button.OK:
var str = re.getResponseText();
ScriptProperties.setProperty('mail',str);
ui.alert(str + "で設定されました。");
break;
case ui.Button.CANCEL:
ui.alert("設定はキャンセルされました。");
break;
case ui.Button.CLOSE:
break;
}
}
図:UiInstanceによるインプットボックスの表示