Los proyectos de Google Apps Script vinculados a Documentos, Hojas de cálculo o Formularios de Google pueden mostrar elementos de la interfaz de usuario, como alertas, mensajes, notificaciones emergentes, diálogos y barras laterales prediseñados. Estos elementos suelen contener contenido personalizado de servicio HTML y, a menudo, se abren desde elementos de menú. En Formularios, los elementos de la interfaz de usuario solo son visibles para un editor que abre el formulario para modificarlo, no para un encuestado.
Cuadros de diálogo de alerta

Una alerta es un diálogo prediseñado que se abre dentro de un editor de Documentos, Hojas de cálculo, Presentaciones o Formularios. Muestra un mensaje y un botón Aceptar. El título y los botones alternativos son opcionales. Es similar a llamar a window.alert en JavaScript del cliente dentro de un navegador web.
Las alertas suspenden la secuencia de comandos del servidor mientras el diálogo está abierto. La secuencia de comandos se reanuda después de que el usuario cierra el diálogo, pero las conexiones JDBC no persisten durante la suspensión.
Como se muestra en el siguiente ejemplo, Documentos, Formularios, Presentaciones y Hojas de cálculo usan el método Ui.alert, que está disponible en tres variantes. Para anular el botón Aceptar predeterminado, pasa un valor de la enumeración Ui.ButtonSet como el argumento buttons. Para evaluar en qué botón hizo clic el usuario, compara el valor de retorno de alert con el enum Ui.Button.
function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.createMenu("Custom Menu")
.addItem("Show alert", "showAlert")
.addToUi();
}
function showAlert() {
const ui = SpreadsheetApp.getUi(); // Same variations.
const 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.");
}
}
Diálogos de mensajes

Una instrucción es un diálogo prediseñado que se abre dentro de un editor de Documentos, Hojas de cálculo, Presentaciones o Formularios. Muestra un mensaje, un campo de entrada de texto y un botón Aceptar. Un título y botones alternativos son opcionales. Es similar a llamar a window.prompt en JavaScript del cliente dentro de un navegador web.
Las instrucciones suspenden la secuencia de comandos del servidor mientras el diálogo está abierto. La secuencia de comandos se reanuda después de que el usuario cierra el diálogo, pero las conexiones JDBC no persisten durante la suspensión.
Como se muestra en el siguiente ejemplo, Documentos, Formularios, Presentaciones y Hojas de cálculo usan el método Ui.prompt, que está disponible en tres variantes. Para anular el botón Aceptar predeterminado, pasa un valor del enum Ui.ButtonSet como el argumento buttons. Para evaluar la respuesta del usuario, captura el valor de devolución de prompt, luego llama a PromptResponse.getResponseText para recuperar la entrada del usuario y compara el valor de devolución de PromptResponse.getSelectedButton con el enum Ui.Button.
function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.createMenu("Custom Menu")
.addItem("Show prompt", "showPrompt")
.addToUi();
}
function showPrompt() {
const ui = SpreadsheetApp.getUi(); // Same variations.
const result = ui.prompt(
"Let's get to know each other!",
"Please enter your name:",
ui.ButtonSet.OK_CANCEL,
);
// Process the user's response.
const button = result.getSelectedButton();
const 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.");
}
}
Avisos de hojas de cálculo
Un "mensaje emergente" es una pequeña ventana de diálogo que aparece en la esquina inferior derecha de un editor de Hojas de cálculo y muestra un mensaje, pero no suspende la secuencia de comandos. Es una buena forma de mostrar mensajes de estado o actualizaciones que no requieren la interacción del usuario.
Como se muestra en el siguiente ejemplo, Hojas de cálculo usa el método Spreadsheet.toast.
Los mensajes emergentes solo están disponibles en Hojas de cálculo.
function showToast() {
SpreadsheetApp.getActiveSpreadsheet().toast("Task completed successfully.");
}
Diálogos personalizados

Un diálogo personalizado puede mostrar una interfaz de usuario del servicio HTML dentro de un editor de Documentos, Hojas de cálculo, Presentaciones o Formularios.
Los diálogos personalizados no suspenden la secuencia de comandos del servidor mientras el diálogo está abierto.
Como son asíncronas, la función del servidor que abre el diálogo finaliza de inmediato. Para pasar datos del diálogo personalizado al servidor, usa la API de google.script en tu código del cliente.
El diálogo puede cerrarse por sí solo llamando a google.script.host.close en el cliente de una interfaz de servicio HTML. El diálogo no se puede cerrar con otras interfaces, solo con el usuario o por sí mismo.
Como se muestra en el siguiente ejemplo, Documentos, Formularios, Presentaciones y Hojas de cálculo usan el método Ui.showModalDialog para abrir el diálogo.
Code.gs
function onOpen() { SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp. .createMenu('Custom Menu') .addItem('Show dialog', 'showDialog') .addToUi(); } function showDialog() { const 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()" />
Barras laterales personalizadas

Una barra lateral puede mostrar una interfaz de usuario de servicio HTML dentro de un editor de Documentos, Formularios, Presentaciones y Hojas de cálculo.
Las barras laterales no suspenden la secuencia de comandos del servidor mientras el diálogo está abierto. El componente del cliente puede realizar llamadas asíncronas a la secuencia de comandos del servidor con la API de google.script para las interfaces de servicio HTML.
La barra lateral puede cerrarse por sí sola llamando a google.script.host.close en el cliente de una interfaz de servicio HTML. La barra lateral no se puede cerrar con otras interfaces, solo con el usuario o por sí misma.
Como se muestra en el siguiente ejemplo, Documentos, Formularios, Presentaciones y Hojas de cálculo usan el método Ui.showSidebar para abrir la barra lateral.
Code.gs
function onOpen() { SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp. .createMenu('Custom Menu') .addItem('Show sidebar', 'showSidebar') .addToUi(); } function showSidebar() { const 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()" />
Diálogos de apertura de archivos
Google Picker es una API de JavaScript que permite a los usuarios seleccionar o subir archivos de Google Drive. Usa la biblioteca de Google Picker en el servicio HTML para crear un diálogo personalizado que permita a los usuarios seleccionar archivos existentes o subir archivos nuevos, y, luego, pasar la selección de vuelta a tu secuencia de comandos.
Requisitos
El uso de Google Picker con Google Apps Script tiene varios requisitos:
Configura tu entorno para Google Picker.
Tu proyecto de secuencia de comandos debe usar un proyecto de Google Cloud estándar.
Pasa el mismo número de proyecto de Cloud a
PickerBuilder.setAppIdsi usas el alcancedrive.file.El manifiesto del proyecto de Apps Script debe especificar los alcances de autorización que requiere la API de Google Picker para que
ScriptApp.getOAuthTokendevuelva el token correcto paraPickerBuilder.setOauthtoken.Restringe la clave de API establecida en
PickerBuilder.setDeveloperKeya Apps Script. En Restricciones de aplicaciones, sigue estos pasos:- Selecciona URL de referencia HTTP (sitios web).
- En Restricciones del sitio web, haz clic en Agregar un elemento.
- Haz clic en Referente y, luego, ingresa
*.google.com. - Agrega otro elemento y, luego, ingresa
*.googleusercontent.comcomo el sitio de referencia. - Haz clic en Listo.
Llama a
PickerBuilder.setOrigin.
Ejemplo
En el siguiente ejemplo, se muestra el Selector de Google en Apps Script.