Google ドキュメント、スプレッドシート、フォームにバインドされたスクリプトでは、数種類のユーザー インターフェース要素(事前構築済みのアラートやプロンプト、カスタム HTML サービス ページを含むダイアログとサイドバー)を表示できます。通常、これらの要素はメニュー項目から開きます。(Google フォームの場合、ユーザー インターフェース要素は、フォームを開いて変更した編集者にのみ表示され、回答するためにフォームを開いたユーザーには表示されません)。
アラート ダイアログ
アラートは、Google ドキュメント、スプレッドシート、スライド、フォームの各エディタ内で表示される、事前作成済みのダイアログ ボックスです。メッセージと「OK」ボタンが表示されます。タイトルと代替ボタンは省略可能です。これは、ウェブブラウザ内のクライアントサイドの JavaScript で window.alert()
を呼び出す場合と同様です。
ダイアログが開いている間は、サーバーサイド スクリプトがアラートによって停止されます。ユーザーがダイアログを閉じると、スクリプトが再開されますが、一時停止の間 JDBC 接続は維持されません。
以下の例に示すように、Google ドキュメント、フォーム、スライド、スプレッドシートでは、すべて Ui.alert()
メソッドを使用します。これには 3 つのバリアントがあります。デフォルトの「OK」ボタンをオーバーライドするには、Ui.ButtonSet
列挙型の値を buttons
引数として渡します。ユーザーがクリックしたボタンを評価するには、alert()
の戻り値を Ui.Button
列挙型と比較します。
function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.createMenu('Custom Menu')
.addItem('Show alert', 'showAlert')
.addToUi();
}
function showAlert() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.alert(
'Please confirm',
'Are you sure you want to continue?',
ui.ButtonSet.YES_NO);
// Process the user's response.
if (result == ui.Button.YES) {
// User clicked "Yes".
ui.alert('Confirmation received.');
} else {
// User clicked "No" or X in the title bar.
ui.alert('Permission denied.');
}
}
プロンプト ダイアログ
プロンプトとは、Google ドキュメント、スプレッドシート、スライド、フォームの各エディタ内で開く事前作成済みのダイアログ ボックスです。メッセージ、テキスト入力フィールド、[OK] ボタンが表示されます。タイトルと代替ボタンは省略可能です。これは、ウェブブラウザ内のクライアントサイドの JavaScript で window.prompt()
を呼び出す場合と同様です。
ダイアログが開いている間、プロンプトによりサーバー側スクリプトが停止されます。ユーザーがダイアログを閉じると、スクリプトが再開されますが、一時停止の間 JDBC 接続は維持されません。
以下の例に示すように、Google ドキュメント、フォーム、スライド、スプレッドシートでは、いずれも Ui.prompt()
メソッドを使用しています。このメソッドには 3 つのバリエーションがあります。デフォルトの「OK」ボタンをオーバーライドするには、Ui.ButtonSet
列挙型の値を buttons
引数として渡します。ユーザーのレスポンスを評価するには、prompt()
の戻り値を取得し、PromptResponse.getResponseText()
を呼び出してユーザーの入力を取得し、PromptResponse.getSelectedButton()
の戻り値を Ui.Button
列挙型と比較します。
function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.createMenu('Custom Menu')
.addItem('Show prompt', 'showPrompt')
.addToUi();
}
function showPrompt() {
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.prompt(
'Let\'s get to know each other!',
'Please enter your name:',
ui.ButtonSet.OK_CANCEL);
// Process the user's response.
var button = result.getSelectedButton();
var text = result.getResponseText();
if (button == ui.Button.OK) {
// User clicked "OK".
ui.alert('Your name is ' + text + '.');
} else if (button == ui.Button.CANCEL) {
// User clicked "Cancel".
ui.alert('I didn\'t get your name.');
} else if (button == ui.Button.CLOSE) {
// User clicked X in the title bar.
ui.alert('You closed the dialog.');
}
}
カスタム ダイアログ
カスタム ダイアログを使用すると、Google ドキュメント、スプレッドシート、スライド、フォーム エディタ内に HTML サービス ユーザー インターフェースを表示できます。
開いている間は、カスタム ダイアログでサーバー側のスクリプトが一時停止されることはありません。クライアント側コンポーネントでは、HTML サービス インターフェース用の google.script
API を使用して、サーバー側のスクリプトを非同期で呼び出すことができます。
HTML サービス インターフェースのクライアント側で google.script.host.close()
を呼び出すことで、ダイアログ自体を閉じることができます。ダイアログは他のインターフェースで閉じることはできず、ユーザーまたは自身で閉じる必要があります。
下記の例に示すように、Google ドキュメント、Google フォーム、Google スライド、Google スプレッドシートでは、どれも Ui.showModalDialog()
メソッドを使用してダイアログを開きます。
コード.gs
function onOpen() { SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp. .createMenu('Custom Menu') .addItem('Show dialog', 'showDialog') .addToUi(); } function showDialog() { var html = HtmlService.createHtmlOutputFromFile('Page') .setWidth(400) .setHeight(300); SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp. .showModalDialog(html, 'My custom dialog'); }
Page.html
Hello, world! <input type="button" value="Close" onclick="google.script.host.close()" />
カスタムのサイドバー
サイドバーを使用すると、Google ドキュメント、フォーム、スライド、スプレッドシートのエディタ内で HTML サービス ユーザー インターフェースを表示できます。
ダイアログが開いている間は、サイドバーを使用してもサーバーサイド スクリプトは停止しません。クライアントサイド コンポーネントは、HTML サービス インターフェース用の google.script
API を使用して、サーバーサイド スクリプトの非同期呼び出しを行うことができます。
HTML サービス インターフェースのクライアント側で google.script.host.close()
を呼び出すことで、サイドバー自体を閉じることができます。サイドバーは他のインターフェースでは閉じることができません。ユーザーまたは自身で閉じることができます。
以下の例に示すように、Google ドキュメント、フォーム、スライド、スプレッドシートでは、いずれも Ui.showSidebar()
メソッドを使用してサイドバーを開きます。
コード.gs
function onOpen() { SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp. .createMenu('Custom Menu') .addItem('Show sidebar', 'showSidebar') .addToUi(); } function showSidebar() { var html = HtmlService.createHtmlOutputFromFile('Page') .setTitle('My custom sidebar'); SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp. .showSidebar(html); }
Page.html
Hello, world! <input type="button" value="Close" onclick="google.script.host.close()" />
ファイルを開くダイアログ
Google Picker は、Google ドライブ、Google 画像検索、Google ビデオ検索などの Google サーバーに保存されている情報を表示する「ファイルを開く」ダイアログです。
以下の例に示すように、Picker のクライアントサイドの JavaScript API を HTML サービスで使用してカスタム ダイアログを作成し、ユーザーが既存のファイルを選択したり、新しいファイルをアップロードしたりして、その選択内容をスクリプトに戻してさらに使用することができます。
Picker を有効にして API キーを取得する手順は次のとおりです。
- スクリプト プロジェクトが標準の GCP プロジェクトを使用していることを確認します。
- Google Cloud プロジェクトで「Google Picker API」を有効にします。
- Google Cloud プロジェクトがまだ開いているときに、[API とサービス] を選択し、[認証情報] をクリックします。
- [認証情報を作成] > [API キー] の順にクリックします。この操作によりキーが作成されますが、キーを編集してアプリケーションの制限と API の制限の両方を追加する必要があります。
- API キー ダイアログで [閉じる] をクリックします。
- 作成した API キーの横にあるその他アイコン
> [API キーを編集] をクリックします。
[アプリケーションの制限] で、次の操作を行います。
- [HTTP リファラー(ウェブサイト)] を選択します。
- [ウェブサイトの制限] で [項目を追加] をクリックします。
- [Referrer] をクリックして「
*.google.com
」と入力します。 - さらにアイテムを追加し、参照 URL として「
*.googleusercontent.com
」と入力します。 - [完了] をクリックします。
[API の制限] で、次の手順を行います。
- [キーを制限] を選択します。
[Select APIs] セクションで、[Google Picker API] を選択して [OK] をクリックします。
注: Google Picker API は、Cloud プロジェクトで有効になっている API のみが表示されているため、有効にしない限り表示されません。
[API キー] で [クリップボードにコピー]
をクリックします。
下部にある [保存] をクリックします。