2 mi separata
TRANSCRIPT
Diplomado Internacional de Desarrollo e
Implementación de Aplicaciones utilizando el Cloud
de Google
Curso
Google Apps- Script
VERSIÓN 1.0
Material elaborado para uso exclusivo de los alumnos de la USMP Virtual
Índice
Módulo I: Programando en Google Apps Script – Introducción
1.1 Enfoque teórico…………………………………………………………………………………………… 1
1.1.1 Definición…………………………………………………………………………………………………... 1
1.1.2 Características…………………………………………………………………………………………….. 2
1.1.3 Publico objetivo…………………………………………………………………………………………… 2
1.1.4 Funcionalidad……………………………………………………………………………………………… 3
1.1.5 Requerimientos para comenzar con Apps Script…………………………………………………… 5
1.1.6 Interacción con otras aplicaciones de Google…………………………………………………….. 5
1.1.7 Otros servicios………………………………………………………………………………………………. 6
1.2 Guía de usuario……………………………………………………………………………………………. 7
1.2.1 Reconocimiento de entornos de ejecución…………………………………………………………. 7
1.2.2 Desarrollo de Scripts……………………………………………………………………………………….. 18
1.2.3 Programación de tareas comunes…………………………………………………………………….. 29
1.2.4 Eventos……………………………………………………………………………………………………….. 34
1.2.5 Gui – interfaz gráfica de usuario………………………………………………………………………... 37
1.2.6 Gui Builder…………………………………………………………………………………………………… 49
1.2.7 Modelo de Seguridad…………………………………………………………………………………….. 51
1.2.8 Solución de problemas y depuración de Scripts……………………………………………………. 55
1.3 Aplicación de Apps Script……………………………………………………………………………….. 57
Google Apps Script 1
Módulo I
Programando en Google Apps Script – Introducción
1.1 Enfoque Teórico
1.1.1 Definición
Google Apps Script es un lenguaje de programación JavaScript basado
en nube, que ofrece maneras fáciles de automatizar las tareas y procesos
en las organizaciones, complementando los productos de Google y
servicios de terceros.
Dicha secuencia de comando permite crear scripts (pequeños programas) para realizar
múltiples funciones y expandir la integración con Google Apps.
Permite a los usuarios tener un nivel de control sobre los productos de Google, mediante
secuencias de comandos JavaScript que se puede escribir y compartir. A diferencia de
navegador basado en JavaScript, los guiones que escribe se ejecutan directamente en
los servidores de Google con el fin de proporcionar acceso directo a los productos bajo
su control.
Qué es un script
«Un script es una serie de instrucciones que se escribe en un lenguaje de programación
para realizar una tarea determinada. El guion solo se ejecuta bajo las circunstancias
que usted defina».
La secuencia de comandos de la API de Google Apps ofrece un conjunto de objetos.
Puede utilizar estos objetos y sus métodos asociados para acceder a Google Docs y
hojas de cálculo, Gmail, Google Finance, y otras aplicaciones de Google. Usted podrá
leer más acerca de los objetos y métodos de uso de la API de Google Apps de
secuencias de comandos.
Para ejecutar un script, primero debe agregar el guion de una hoja de cálculo de
Google o Google Site utilizando el Editor de Script. Usted puede agregar secuencias de
comandos como quiera de una hoja de cálculo en particular como desee, y luego
ejecutar de acuerdo a su criterio e interés.
Las secuencias de comandos, normalmente, se ejecutarán con los datos en la hoja de
cálculo, pero no se limitan al uso de datos en la hoja de cálculo. Puede recuperar
información de una amplia gama de aplicaciones y servicios de Google como de
fuentes externas, incluyendo las páginas web y las fuentes XML.
Google Apps Script 2
Google Apps Script proporciona una robusta API (Interfaz de Programación de
Aplicaciones) de los objetos y métodos que se utilizan en las secuencias de comandos
para tareas, tales como la visualización de un cuadro de diálogo, la creación de una
agenda de eventos, la creación de una página en un Google Site, y muchas otras
actividades.
1.1.2 Características
Capacidad para automatizar los procesos repetitivos de negocios (por ejemplo, las
aprobaciones de gastos, seguimiento del tiempo de la hoja, la gestión de entradas,
preparación de pedidos, y mucho más).
Enlace con los productos de Google y servicios de terceros (por ejemplo, enviar
correos electrónicos personalizados y una invitación de calendario a una lista de una
base de datos MySQL)
Crear funciones personalizadas de hoja de cálculo.
Construir y recoger las entradas del usuario a través de interfaces gráficas y menús
(por ejemplo, una empresa podría alimentar una aplicación interna para la compra
de suministros de oficina, donde los usuarios pueden comprar a través de una interfaz
de menú personalizado)
Creación y ejecución de comandos JavaScript en los servidores de Google para
realizar procedimientos como:
- Personalizar una hoja de cálculo con los botones o los menús.
- Crear un presupuesto.
- Seguimiento de precios de las acciones en el tiempo.
- Seguimiento de los pagos de cuotas de un club.
- Manipular los datos en formato XML.
- Creación de páginas en un Google Site.
- Enviar correo electrónico basado en la información en una hoja de cálculo.
- Puede manipular cualquier tipo de datos con un script, incluidos los financieros
numéricos, y la cadena (de texto), y datos representados como un documento
XML.
1.1.3 Público objetivo
a) No Programadores
Se dispone de información detallada, paseos virtuales de fragmentos de código y
muchos programas cortos en versión libre. Usted encontrará el aprendizaje de
secuencias de comandos de Google Apps Script, de modo más sencillo, si está
familiarizado con las macros de hojas de cálculo y las fórmulas, estructuras de
programación como los bucles, sentencias condicionales y sentencias switch. Teniendo
estas premisas que no son nada complejas, se podrá entender con facilidad los recursos
y programas ya realizados que pueden ser implementados por el usuario realizando
manipulación de datos.
Google Apps Script 3
Si desea obtener más información acerca de JavaScript, podrá disponer de muchos
libros impresos y tutoriales difundidos en la Web. Por ejemplo, el tutorial en
<http://www.w3schools.com/js/default.asp> está escrito teniendo como público
objetivo, principiantes en JavaScript.
b) Programadores
Si usted tiene conocimientos de algún JavaScript y/o lenguaje de programación
orientado a objetos, se podrá adaptar fácilmente y sus ideas fluirán naturalmente. Para
ello, se sugiere tener en cuenta leer los apartados de eventos, interfaces de usuario,
seguridad y solución de problemas, que son temas contemplados en el presente
documento. Asimismo, se sugiere revisar el apartado del API de servicios Google Apps
Script que proporciona los objetos y métodos que están integradas en Google Apps
Script.
1.1.4 Funcionalidad
Google Apps Script se puede ejecutar tanto en entornos como:
Google Docs
La interacción dentro de Google Docs hace referencia al uso de la secuencia de
comandos Apps Script para hojas de cálculo (Spreadsheets). Si estamos familiarizados
como se mencionada anteriormente con macros y funciones de hojas de cálculo,
podremos realizar personalizaciones con mejores niveles de rendimiento utilizando
Spreadsheets. Para acceder al entorno de secuencia de comandos, podemos ver la
siguiente imagen, así se tendrá una referencia más clara.
Google Apps Script 4
Para obtener un mejor rendimiento en la realización de automatización de procesos, el
procedimiento adecuado sería utilizar Google Forms como entorno para elaborar
formularios, luego el procedimiento de personalizar las funcionalidades dentro del
SpreedSheet que genera el formulario.
Google Sites
Finalmente, después de crear el formulario y el Spreedsheet para una
automatización de proceso, podemos difundir nuestro aplicativo
dentro de un Google Site o un entorno web.
Si utilizamos Google Sites, podremos incrustarlo utilizando un gadget
que se encuentra en el menú principal, insertando el formulario y,
finalmente, la hoja de cálculo personalizada.
Google Sites también presenta su propio gestor de ejecución de las funciones de
Google Apps Script utilizando el Editor de Script. Sin embargo, solo se puede ejecutar
secuencias de comandos de Google Apps Script, si accede al servicio a través de una
cuenta de Google (Estés logeado a tu cuenta mientras navegas el sitio). Cuando
ejecute una secuencia de comandos de Google Apps Script, la acción se registra como
procedente de su cuenta. Por ejemplo, si hace clic en un enlace que ejecuta una
secuencia de comandos para enviar un correo electrónico, el mensaje se enviará
desde su dirección de correo electrónico.
Si la secuencia de comandos de Google Apps Script, requiere acceso a la información
de su cuenta. Por ejemplo, para enviar un correo electrónico o crear una invitación del
calendario, deberá autorizar dicho acceso.
- Autorice el acceso a los datos de su cuenta, únicamente, a secuencias de comandos
de Google Apps Script de sitios y personas de confianza. Si tiene dudas sobre cómo se
utilizará su información, haga clic en "Cancelar" en el cuadro de diálogo en que se
solicita su autorización.
- Si, por el contrario, quiere que la secuencia de comandos pueda acceder a su
cuenta, haga clic en "Autorizar". A continuación, haga clic en el enlace otra vez para
ejecutar la secuencia de comandos.
Google Apps Script 5
Google Sites recordará que ha autorizado el acceso a su cuenta a esta secuencia de
comandos de Google Apps Script y solo le volverá a solicitar autorización, si la
secuencia debe acceder a la nueva información.
Entornos y aplicativos web
Las secuencias de comandos Apps Script pueden ser incrustados, también, en otros
entornos o aplicativos web embebiendo el código que puede generar. Para ello, es
necesario obtener el código y, luego, insertarlo en nuestro aplicativo o entorno web
para visualizar su respetiva funcionalidad.
1.1.5 Requerimientos para comenzar con Apps Script
Reconocimiento de lenguajes y entornos
- Conocimiento del lenguaje JavaScript.
- Se sugiere estar familiarizado con Google Docs (Spreadsheets, Forms), Google Sites y
desarrollo en entornos web.
- Los puntos anteriormente definidos, son solo sugerencias mas no requisitos obligatorios.
Los manuales e información que se puede encontrar navegando en los diversos
entornos web como en www.code.google.com, hacen énfasis a que no se presenta
requerimientos a nivel avanzado en programación para poder comenzar con Apps
Script.
Requerimientos de ejecución
- Cuenta de Google: La cuenta puede ser una cuenta de gratuita, en la que la
dirección de correo electrónico está en el dominio gmail.com, o una cuenta de
Google Apps, en la que la dirección de correo electrónico está en el dominio
yourdomain.com. Por ejemplo, si su empresa (example.com) utiliza Google Apps, su
dirección de correo electrónico es [email protected]
- Navegador web. Un navegador web compatible. Estos incluyen Google Chrome,
Mozilla Firefox y Safari.
1.1.6 Interacción con otras aplicaciones de Google
Google Apps Script incluye objetos y métodos para el control de datos en las siguientes
aplicaciones:
Google Apps Script 6
1.1.7 Otros servicios
Google Apps Script también incluye los siguientes servicios:
- UiApp services, que permiten a los scripts crear una pantalla interactiva con los
elementos de la interfaz del usuario. Esto es experimental.
- JDBC services (Java Database Connectivity), que permiten a los scripts interactuar
con los sistemas de bases de datos relacional. Esto es experimental.
- DocsList services, que permiten a los scripts crear carpetas, subcarpetas y archivos en
la lista de documentos de Google Docs. Esto es experimental.
- Base services, que permiten el acceso a los scripts de usuario, la sesión y la
información del navegador.
- SOAP services (Simple Object Access Protocol), que dan a los scripts, acceso a los
servicios web. Utilizar los servicios SOAP para el intercambio de datos o comunicarse
con las aplicaciones web corporativas habilitadas para los servicios.
- XML services (eXtensible Markup Language), que permiten a los scripts extraer datos
de documentos XML y luego manipular dichos datos.
- Language services, que permiten a los scripts obtener traducciones de textos de un
idioma a otro.
- Mail services, que permiten a los scripts enviar correos electrónicos.
- UrlFetch services, que permiten a los scripts comunicarse con otros hosts en la Internet
y obtener recursos de los servidores.
Google Apps Script 7
- Utilities services, que permiten a los scripts codificar y decodificar las cadenas de
texto y las fechas en formatos.
- Properties services, que permiten almacenar las propiedades en un script para cada
usuario. Esto es experimental.
- Contacts services, que permiten a los scripts, crear, eliminar y actualizar la
información de contacto de los individuos como para grupos en Google Contacts.
1.2 Guía de usuario
1.2.1 Reconocimiento de entorno
Para analizar cada entorno donde podremos utilizar las secuencias de comandos
Google Apps Script, analizaremos cómo aprender a crear y reutilizar dichos scripts,
mediante los siguientes entornos:
a) Galería de secuencia de comandos
La forma más rápida y fácil de usar Google Apps Script es utilizar la galería de secuencia
de comandos existentes. Estos scripts son aportados por los miembros del equipo de
Google Apps.
Para instalar y ejecutar un script desde la galería, cumpla los siguientes pasos:
i. Acceda a Google Docs utilizando su cuenta.
ii. Cree una hoja de cálculo.
iii. Dé un nombre a la hoja de cálculo de manera que se guarda automáticamente.
Google Apps Script 8
iv. Nos ubicamos en la sección “Insertar” > “Secuencia de Comandos”. De este modo,
veremos la galería de secuencias de comandos que contienen los scripts, los cuales
se pueden instalar y ejecutar.
v. En este paso, podremos visualizar la galería general que contiene diversas
categorías de scripts listos para instalar.
Google Apps Script 9
vi. Para instalar un script, solo debemos dar clic en “Instalar”. Luego, aparece un
mensaje, el cual indica que el script se ha instalado correctamente.
Nota: Antes de instalar un aplicativo, siempre se debe autorizar al script para que utilice
los datos de nuestra cuenta. Este punto fue detallado en la sección de requerimientos
de ejecución en la sección del enfoque teórico.
Finalmente, para ver el estado de nuestro script, podemos ver, en la galería, el mensaje
de instalación:
xxxxxxxx
Google Apps Script 10
vii. Finalmente, le damos clic a “Cerrar” y nuestro script quedará instalado.
Para las gestiones de administración de nuestros scripts, podremos utilizar el
“Administrador de secuencia de Comandos”. Para acceder a dicho entorno, vamos a
la sección: “Herramientas” > “Administrador de secuencia de comandos”.
Finalmente, podremos obtener la vista del administrador, lo cual nos ayudará a listar y a
visualizar toda la sección de los scripts que contiene nuestro spreadsheet.
Google Apps Script 11
Para ejecutar cualquier sentencia de los comandos que tenemos dentro de la
administración, podemos utilizar los botones ubicados en la parte inferior de la pantalla,
tales como: “Ejecutar”, “Editar”, “Nuevo”, “Cerrar”.
b) Acceder a codificar un nuevo Apps Script en un SpreadSheet.
Tomando como ejemplo la misma hoja que hemos creado recientemente, vamos a
ubicar la sección “Herramientas” > “Editor de secuencia de comandos” y veremos el
código que se ha generado, producto de la instalación del script creado
anteriormente.
Dentro de la sección del editor de comandos, vamos a evaluar la barra horizontal de
opciones que muestra las siguientes características. Entre los más importantes tenemos:
Google Apps Script 12
Sección Archivo
Nota: Al igual que podemos compartir un documento, la sección de comandos
también se puede compartir con la finalidad que se pueda trabajar de forma
colaborativa.
La secuencia de “Compilar una interfaz de usuario”, nos permitirá la posibilidad de
generar aplicativos utilizando interfaz gráfica. El entorno de creación de aplicativos bajo
esta modalidad presenta el siguiente esquema:
Google Apps Script 13
Sección Compartir
Al igual que podemos compartir un documento, la sección de comandos también se
puede compartir con la finalidad de que otros usuarios con cuentas Google, puedan
acceder y modificar nuestra sección de comandos. De esta forma, se puede realizar el
trabajo colaborativo para la generación de scripts. Adicional a dicha funcionalidad,
también podemos publicar nuestro proyecto o también realizar una publicación en
modalidad de servicio.
Sección Triggers
La secuencia de Triggers o activadores, cumple los mismos parámetros desde el
enfoque de programación en base de datos. Podemos ejecutar una determinada
función ante un evento o programación, en una hora específica, de acuerdo a la
solución que podamos plantear.
Google Apps Script 14
Sección Ayuda
La sección de ayuda nos permitirá, en caso de no tener conocimiento en el manejo de
la sección de Apps Script, el acceso a información y referencias generales para
comenzar la secuencia de comandos para personalizar Spreadsheets.
c) Acceso a secuencia de comandos desde Google Sites
La secuencia de creación y edición dentro de una secuencia de comandos Apps
Script, se da después de haber creado una página web dentro de Google Sites.
Para ello, vamos a ubicar la siguiente pestaña posterior a haber creado un sitio prueba.
Sección: “Más Acciones” > “Administrar Sitio”.
La pantalla principal que nos mostrará, hará referencia a la sección de administración
general de un Google Site. Para lo cual, ubicaremos la sección “Secuencia de
Comandos de Apps”.
Google Apps Script 15
En este entorno, podremos añadir nuevas secuencias con la finalidad de insertarlo
dentro de un site. La pantalla de creación de la sintaxis de nuestra sentencia es la
misma como si utilizaríamos un Spreadsheet, para lo cual cuando vayamos a crear una
sentencia, se listará automáticamente y estará disponible al momento de insertar
elementos dentro del site.
Para insertar, por ejemplo, una sentencia de comandos guardada dentro del
administrador de comandos de Google Sites, nos ubicamos en la página donde
deseamos insertarla y activamos la opción “Editar Página”.
Google Apps Script 16
Finalmente, para insertar la secuencia de comandos, nos ubicamos en la sección:
“Insertar” > “Gadgets Apps Script”.
Al escoger dicha sección, nos mostrará la lista de comandos Apps Script que contamos
en nuestra cuenta.
Dentro de esta opción, también podemos insertar la URL de la secuencia de comandos
Google Apps Script que fueron publicados como servicio.
Google Apps Script 17
Cuando insertamos nuestro elemento, nos mostrará una pantalla que debemos de tener
en cuenta a fines de determinar el grado de privacidad de ejecución de nuestro
aplicativo.
Cuando aceptamos los términos, veremos que nuestra secuencia de comandos se ha
insertado en un Gadget Apps Script, tal como lo muestra la siguiente imagen:
Por último, guardamos la página y ya habremos insertado nuestra secuencia de
comandos en una página de un Google Site.
Nota: Usted debe ser propietario de un sitio o un colaborador del sitio (editor) para
acceder a Google Apps en un script.
Google Apps Script 18
1.2.2 Desarrollo de Scripts
Sobre el Script Editor
La pantalla principal, por defecto, declara una función
llamada myFunction () e incluye la apertura y el cierre de
las llaves de la función. Sin embargo, es el único código.
Esta función no se ejecutará si se trata de ejecutarla.
Podemos instalar un Script de la “Galería de Scripts”
disponible desde el menú del spreadsheet. También se puede usar el Script Editor que
muestra el área donde se va a escribir las secuencias de comandos. Se aplican colores
para cada criterio a fines de que sea fácil la identificación de los diversos elementos en
el momento de la programación. Para ello, vamos a ver las siguientes características:
- Los elementos tales como var, function y las estructuras de programación son de color
granate.
- Los nombres de las variables son de color azul.
- Los argumentos literales a los métodos están en verde.
- Los argumentos de las variables a los métodos son de color azul pálido.
- Los nombres de variables son de color azul pálido.
- Nombres de los métodos y la función están en negro.
- Texto literal es de color rojo, incluyendo las líneas de código que se comentan.
- Los comentarios están en color marrón claro.
Puede realizar las siguientes tareas en el Script Editor.
- Administración de archivos, tareas, como abrir, eliminar, renombrar y guardar, cortar,
copiar, buscar, reemplazar y pegar texto y/o scripts.
- Establecimiento de una zona horaria para el script, lo que asegura que con el tiempo
las secuencias de comandos basado en triggers se ejecutan cuando usted desee
que se ejecuten. Establecer una zona horaria en “Archivo” > “Propiedades”.
- Apertura de la “Galería de Script”, usando “Insertar” > “Secuencia de comandos”.
- Al examinar las propiedades del script, que incluyen el nombre, descripción, fecha y
hora de un script, se modificó la clave de secuencia de comandos. La clave del
script es un identificador único para cada secuencia de comandos.
- Ejecutar las funciones. Cualquier función puede ser invocada directamente desde el
“Editor de secuencias de comandos”, excepto aquellos con un nombre que termina
con un script bajo, que solo puede ser llamado desde otras funciones.
- Viendo mensajes de registro y las transcripciones de la ejecución.
Google Apps Script 19
Planificación de una secuencia de comandos
Para planificar el desarrollo de un script, le resultará útil escribir pseudocódigo. El
pseudocódigo es una versión narrativa precisa y detallada de lo que el script tiene que
hacer. Se utiliza pseudocódigo para ayudarle a determinar cómo funciona el script ante
muchas necesidades, donde se necesitan variables, bucles y contadores. También es
útil para realizar diferentes cálculos. Aquí les presentamos un pseudocódigo sugerido
para la gestión de acciones.
first function runs when Spreadsheet is opened
read the current Spreadsheet into a variable
define menu entries
define menu name
second function does most of the work in the Spreadsheet
read the current Spreadsheet into a variable
set the column labels
define a counter called row
start a while true loop
use an if loop to test whether there's a stock symbol in the current row first column
write data to the log
look up the stock symbol
write the stock information in the correct column of each row that has a stock symbol
write data to the log
increment the counter
Un adecuado flujo de pseudocódigo, le será más fácil para que pueda escribir el script.
Características de un scripts en un SpreadSheets
Un script en particular está asociado con una sola hoja de cálculo de Google. Si hace
una copia de la hoja de cálculo, el guion también se copia. Usted puede verificar esto
mediante el historial de revisiones del script de las secuencias de comandos en la hoja
de cálculo original y la copia.
Una hoja de cálculo en particular puede tener varios scripts asociados a ella. Si utiliza el
onOpen, controlador de eventos, en más de un script asociado con una hoja de
cálculo en particular, todos los scripts deben comenzar a ejecutar cuando se abre la
hoja de cálculo y el orden en que los scripts se ejecutan es indeterminado.
Un controlador de eventos es una función ejecutada cuando un evento en particular se
lleva a cabo. Para obtener información completa acerca de los controladores de
eventos, consulte <ejecutar secuencias de comandos en respuesta a un evento>.
Un script, actualmente, no puede llamar o crear otro script y no se puede llamar a
funciones en otro script. Las funciones no pueden cambiar el estado en el entorno de
ejecución, aunque se puede simular que el comportamiento de las células de hoja de
cálculo se pueda modificar. Es decir, después de que una función se ha ejecutado,
todos los datos que se almacenan en las variables que la función y los objetos se borran.
Google Apps Script 20
Si desea almacenar los resultados de una función, debe copiarlos en una celda de hoja
de cálculo.
Características de un Scripts en un Sites
Puede realizar eventos Apps Script tipo triggers de los vínculos que se insertan en un
Google Site. Para obtener información sobre cómo hacerlo, consulte utilizando Apps en
su Site.
También puede insertar un script en un sitio como un gadget. Para obtener más
información, consulte la información de incrustación de secuencias de comandos Apps
Script de Google Sites en los enlaces de interés.
A partir de un Script
Cuando se abre el “Editor de secuencias de una hoja de cálculo” o el sitio que no
contiene un script, se ve lo siguiente:
function myFunction ( ) { }
El nombre de la función myFunction es temporal, sustituto de un nombre que se
asigna. Cuando se escribe un script, puede asignar funciones en el script con cualquier
nombre. Los nombres de funciones se componen, generalmente de las palabras que
indican, lo que hace la función como getStockName.
Los nombres de las funciones, por lo general, cumple estándares sugeridos más no
obligatorios, donde la primera letra de la primera palabra es minúscula y la primera letra
de cada palabra que le sigue se escribe con mayúscula y, así sucesivamente. Las
instrucciones de una función deben escribirse entre llaves.
Los scripts pueden tener tantas opciones según lo que el usuario desee. A medida que
escribe las funciones de los scripts, se sugiere incluir comentarios que describen lo que
los principales bloques de código realizan con el propósito de crear determinadas
variables y así sucesivamente. Comentarios que sean más fáciles de entender para
saber lo que hace el script y, también que sean más fáciles para mantener la secuencia
de comandos en el futuro.
Funciones que termina en un script bajo (_), por ejemplo, internalStuff_ (), se diferencian
de otras funciones. Usted no ve estas funciones en el campo de ejecución en el “Editor
de secuencias de comandos” y no aparecen en el “Administrador de secuencia de
comandos en la hoja de cálculo”. Donde podrá utilizar el subrayado para indicar que
los usuarios no deben tratar de ejecutar la función y la función solo está disponible para
otras funciones.
Google Apps Script 21
Definir la forma de ejecución de la secuencia de comandos
Usted controla cuándo y cómo se debe ejecutar el script. Al escribir scripts, usted debe
elegir entre las siguientes formas de ejecución:
Uso de un controlador de eventos: Los controladores de eventos permiten ejecutar los
scripts cuando una hoja de cálculo se abre, cuando un script se instala, cuando una
hoja de cálculo se edita y, a veces, cuando usted lo elige. Para obtener información
completa, consulte en los enlaces de interés del curso.
Uso de un elemento de menú personalizado: Por ejemplo, el script de “Precios en
Stock” de la acción se ejecuta cuando el usuario hace una selección de menú
particular.
Uso de un dibujo o un botón incrustado en una hoja de cálculo. Cuando el usuario
hace clic en un dibujo o imagen, una secuencia de comandos asociada se ejecuta.
Para más información, consulte en: <Creación de un botón para ejecutar el código>
en el tutorial de <Lectura de datos de hoja de cálculo Utilización de objetos
JavaScript>.
Utilizando una función personalizada que hace referencia como una función de hoja
de cálculo. Para más información sobre funciones personalizadas, consulte en:
<Utilización de funciones personalizadas>.
Al hacer clic en el botón de ejecución en el “Editor de Script”.
Al hacer clic en la ejecución del botón “Script Manager”, que se llega por la elección
de “Herramientas”> “Administrador de secuencia de comandos”.
La identidad con la que se ejecuta un script depende de cómo se pone en marcha.
Para obtener información completa sobre esto, vea “Permisos de comprensión y
ejecución de Scripts”.
Utilizando el API de Google Apps Script
Para utilizar la API de Google Apps Script, tendremos que hablar un poco acerca de los
lenguajes de programación orientados a objetos y cómo funcionan. A continuación,
hablaremos de cómo leer la documentación de la API.
Google Apps Script utiliza el lenguaje JavaScript. Operaciones específicas de Google
Apps Script que se realizan con los objetos y métodos descritos en la documentación del
API.
API significa interfaz de programación de aplicaciones. Una API ofrece
preempaquetados de código para tareas estándares que usted necesita para llevar a
cabo en scripts o programas.
Google Apps Script 22
El API de Google Apps Script incluye objetos que se utilizan para realizar tareas como el
envío de correo electrónico, creación de entradas de calendario, la creación de
mapas, creando una interfaz de usuario, o traducción de textos. Un método describe el
comportamiento de un objeto y una función asociado a un objeto.
Por ejemplo, Google Apps Script tiene un objeto llamado MailApp que se utiliza para
crear y enviar correo electrónico. MailApp tiene dos métodos,
sendEmail y getRemainingDailyQuota. Para enviar correo electrónico, se invoca
el método sendEmail y este proporciona los atributos. Google Apps Script tiene la
capacidad de trabajar con atributos básicos y avanzados. Se necesitan atributos para
que un método sea más funcional operativamente. Los atributos son opcionales y le
dará más flexibilidad en la definición del comportamiento de un método.
En el caso del método sendEmail, los atributos especifican la información que entra en
el correo electrónico. El método sendEmail tiene atributos avanzados. Los atributos son
los destinatarios, el asunto del correo electrónico, el cuerpo o el texto que se envía, la
dirección de respuesta de correo electrónico, y otros argumentos.
Por ejemplo, la instrucción siguiente envía correo electrónico a cuatro personas,
mikemike, lisa, Janos, y Nikhil, cuyos nombres están en una lista delimitada por comas y
entre comillas. El correo electrónico tiene la línea de asunto “Attachment Example” y el
cuerpo del texto “Here is my document”.
Las instrucciones dentro de las llaves definen el archivo adjunto.
MailApp.sendEmail("[email protected],[email protected],[email protected],ni
[email protected]", "Attachment example", "Here is my document", {attachments:
myFiles});
Las instrucciones de arriba invocan al método sendEmail en la clase MailApp . La sintaxis
general es la siguiente:
ClassName.methodName(argument1, argument2, argument3....argumentn);
Por ejemplo, para que aparezca un cuadro de mensaje diciendo “¡Hello, World!”, que
podría llamarse en el método MsgBox en el navegador de clases, debemos pasar el
texto ¡Hola, mundo! como un atributo:
Browser.msgBox("Hello, World");
„Browser.msgBox ()‟ no está actualmente disponible en un Google Site, en su lugar
puede enviar una notificación por correo electrónico:
Google Apps Script 23
MailApp.sendEmail("[email protected]", "Hello world!", "Sent from Apps Script")
O añadir un mensaje en el registro:
Logger.log("Hello world!")
Nota: En el API de Google Apps Script, la barra lateral de la izquierda contiene enlaces a
todos los servicios y todos los objetos asociados a un servicio particular. Por ejemplo, si
hace clic en el enlace “DocsList”, verá una página web que detalla los objetos y todos
los métodos de los objetos. Si hace clic en el enlace con el “archivo de clase base”, se
ve una página que describe los métodos de la clase. Si hace clic en “un nombre de
método en la tabla”, aparece una lista de argumentos disponible para el método y los
valores devueltos por el método. Por ejemplo, el getName método devuelve, el nombre
de un archivo como un valor de cadena (de texto).
o Almacenamiento de datos y fuente de datos
Google Apps Script puede acceder o recuperar los datos en diferentes formatos de
diferentes maneras. La forma más sencilla de proporcionar datos a un script es poner los
datos en la hoja de cálculo o el sitio donde se almacena el script. Puede escribir,
importar datos a hojas de cálculo de Google a partir de los siguientes formatos:
Xls
Xlsx
Ods
Csv
Txt
Si usted tiene datos en otro formato, puede ser capaz de exportar a uno de los formatos
de archivo mencionado, y luego importar los datos en hojas de cálculo de Google.
Google Apps Script puede trabajar con datos XML. Es necesario conocer la estructura
de los datos XML para analizar y manipular los datos. Para más información, consulte
la API para el manejo de documentos XML y el tutorial para analizar documentos XML.
o Utilización de funciones personalizadas
Una función personalizada es una función que se llama directamente desde una celda
de una hoja de cálculo, utilizando la sintaxis myFunctionName = ().
Las funciones personalizadas devuelven valores, pero no pueden establecer los valores
fuera de las celdas que están dentro en la mayoría de circunstancias, una función
personalizada en la celda A1, no puede modificar la celda A5.
Sin embargo, si una función retorna un doble arreglo, los resultados sobrepasan la celda
que contiene la función y, llenan la parte inferior y del costado derecho de la celda que
contiene la función personalizada. Usted puede probar (testear) esto con una función
personalizada que contenga [[1,2]].[[3,4]]; como retorno.
Google Apps Script 24
El script The Oracle of Bacon que se puede ver en el tutorial sobre el análisis de los datos
XML, utiliza una función personalizada para obtener los nombres de los dos actores
antes de usar the Oracle of Bacon: = kb ( "ACTOR_NAME1" , "ACTOR_NAME2" ) .
No es necesario realizar ninguna acción en una función personalizada para ejecutar,
además de proporcionar, los datos requeridos por la función personalizada dentro de la
celda.
Las funciones personalizadas tienen algunas restricciones, pues no son compartidos por
otras funciones:
Una función personalizada no puede enviar un correo electrónico.
Una función personalizada no puede operar en Google Site.
En una función personalizada, no se pueden realizar operaciones que requieren la
autorización del usuario. Por ejemplo, una función personalizada no se puede colocar
en una agenda de eventos en el calendario de otro usuario.
Una función personalizada no puede realizar operaciones que requieren el
conocimiento de quién es el usuario.
o Interacciones con las fórmulas en spreadsheets existentes
En un spreadsheet, existen funciones que nos permitirán ejecutar las funciones que
podamos escribir o instalar, directamente, desde la galería de scripts. Aquí está la
información acerca de cómo las fórmulas de los SpreadSheets y las funciones en el
script pueden ejecutar e interactuar.
Si hay una función onInstall en el spreadsheet, se ejecuta cuando se instala la hoja de
cálculo.
Si hay una función on Open en el spreadsheet, se ejecuta cuando se abre la hoja de
cálculo.
Funciones personalizadas y las fórmulas de la hoja, se ejecutan cada vez que se
evaluó el spreadsheet completo o cuando cambian los datos en la función de celda
o fórmula.
Otras funciones se ejecutan de forma manual o cuando se activan, haciendo clic en
un vínculo o un dibujo para que una función se adjunte.
o Compartir los Scripts
Usted tiene varias opciones para el intercambio de scripts.
Es posible que desee compartir un script con los amigos o compañeros de trabajo en
particular. Para ello, explícitamente, podemos compartir el Spreadsheet en el que se
almacena el script.
Es posible que desee compartir una escritura pública. Si usted tiene una cuenta de
Google, puede publicar el script en la Galería de Scripts. Cuando se publica en la
Galería de Scripts, el Script estará disponible para otros usuarios de Google Docs.
Google Apps Script 25
Es posible que desee compartir un Spreadsheet y un script. Este es el más apropiado
cuando un script se basa principalmente en el formato de Spreadsheet. Una plantilla
de Spreadsheet incluye el script y el formato especial que usted designa.
Para compartir la hoja de cálculo y puedan ejecutar o modificar la secuencia de
comandos, debemos cumplir lo siguiente:
1. Invitar a otros a la hoja de cálculo utilizando el “Compartir” de botón dentro de la
hoja de cálculo.
2. Asignar los permisos de edición a los usuarios que deseamos que puedan tener la
facultad de editar la hoja de cálculo.
3. Para que otros usuarios puedan editar el script:
En el “Editor de secuencias de comandos”, haga clic en “Compartir” >
“Configuración del uso compartido”.
Compruebe en “Permitir que los colaboradores puedan editar el script” y haga
clic en “Ok”.
Para publicar un guion a la Galería de Script, cumpla los siguientes pasos:
1. En el “Editor de secuencias de comandos”, haga clic en “Publicar proyecto”.
2. Introduzca el “Nombre de script”.
3. Escriba una breve descripción, incluyendo la manera de ejecutar el script, los datos
que requiere el guion, y cualquier otra información que los usuarios puedan ser útiles.
4. Elija una categoría de la lista desplegable.
5. Escriba la ubicación de una página de ayuda.
6. Lea el texto explicativo acerca de los guiones de publicación.
Google Apps Script 26
7. Lea los términos adicionales de Google Docs.
8. Haga clic en “Publicar”. Después que Google revise el script, lo coloca en la Galería
de Script y recibirá un correo electrónico confirmando que el guion ha sido
publicado.
Para enviar una plantilla de hoja de cálculo, cumpla los siguientes pasos:
1. Abra la lista de documentos.
2. Seleccione la hoja de cálculo.
3. Haga clic en “Más acciones” en la lista desplegable.
4. Seleccione “Enviar a la galería de plantillas”.
5. Escriba una breve descripción, escoja una o dos categorías de la plantilla, y
seleccione un idioma.
6. Haga clic en “Enviar plantilla”.
Para más información sobre las presentaciones de plantilla, lea “Envío de una plantilla”.
o Manejo de Errores
Usted puede ver los errores dentro de la secuencia de scripts, mientras que puede estar
escribiéndolos.
Si escribe una línea de código y hay un error tipográfico en el mismo, el código de
colores marcará una línea que indica que existe un error. Por ejemplo, la siguiente línea
de código del guion „precio de la acción‟ es correcta:
sheet.getRange(row, 2).setValue(stockInfo.name);
Cuando es accedido correctamente mediante el editor de scripts, el código es el
siguiente:
Si escribe accidentalmente setVal en lugar de setValue, los paréntesis stockInfo.name son de
color verde en lugar de negro:
Un script con una sintaxis incorrecta o con fallas, no llegará a ejecutarse. Si hay errores
de sintaxis en un script, aparecerá un mensaje de error al guardar la secuencia de
comandos o en el momento que se intenta ejecutar.
Por ejemplo:
Google Apps Script 27
Cannot find method addMenu(string,Undefined). (#3)
Los mensajes de error siempre incluyen el número de línea en el script donde se detuvo
la ejecución. Abra el script en el “Editor de secuencias de comandos” para examinar el
guion.
Para más información sobre mensajes de error y en los guiones de problemas, consulte a
“Solución de problemas y depuración de scripts”. En caso de obtener información sobre
cómo utilizar el “Editor de script” incorporado en depurador, vea “Utilizar el depurador”.
Finalmente, revise los enlaces de interés del curso.
o Uso del depurador
El Script Editor incluye un depurador. El depurador le permite ver el estado actual de las
variables y los objetos creados por un script, mientras que se ejecuta. Puede recorrer el
código línea por línea mientras se ejecuta o establecer puntos de interrupción en la
que se detiene la ejecución de código para que pueda ver los valores en ese
momento.
El depurador está destinado, principalmente, para su uso con los guiones largos y
complejos que incluyen cientos o miles de líneas de código. Puede escanear y
determinar los valores de variables para un pequeño script simplemente viendo el script,
pero si el código o los cálculos son bastante complejos en un script corto, todavía
puede encontrar utilizado al depurador.
El depurador no funciona con las funciones personalizadas, las funciones onEdit y
desencadenantes de eventos o secuencias de comandos, se ejecutan como un
servicio.
Para iniciar el depurador:
1. Abra una hoja de cálculo que contiene un script.
2. Haga clic en “Herramientas” > “Editor de secuencia de comandos” > “Script Editor”.
3. Haga clic en el depurador de ícono, que se encuentra entre el triangular,
azul “Ejecutar” el icono y la función de la lista desplegable. El depurador ícono se
parece a un pequeño insecto. El depurador se muestra en la parte inferior de la
ventana de Script Editor.
Google Apps Script 28
Los errores de sintaxis son capturados por la escritura de aplicaciones, ya sea en la
etapa de entrada o la primera vez que intenta ejecutar un script. Se utiliza el depurador
para encontrar errores en los scripts con una sintaxis correcta, pero aún no funcionan
correctamente. Mientras que puede iniciar el depurador, cuando un script contiene un
error de sintaxis, como el SETVAL, también puede ver el resultado del error, TypeError:
Cannot find function setVal in object Range, en la ventana del editor de secuencias de
comandos sobre el script.
He aquí un ejemplo del tipo de error que se encuentre con el depurador. Es posible que
si tenemos una variable que está siendo utilizada en una posición incorrecta,
automáticamente, se almacenará valores incorrectos, por lo que nuestro procedimiento
de cálculos será erróneo. A continuación, se utiliza el depurador para observar el valor
de la variable en diferentes puntos en el script. Esto permitirá localizar a la variable que
no está ajustada.
Usted puede hacer esto usando declaraciones de registro, que se describen en
la creación de mensajes de registro y ver los registros. Es más eficaz utilizar el depurador,
que le permite ver los valores en tiempo real, sin verificar los registros en varias ocasiones.
o Establecer puntos de Interrupción
Un punto de interrupción o corte es un lugar donde nos gustaría que el código
detenga la ejecución para que pueda ver los valores en el depurador. Se puede
establecer puntos de interrupción en un script, haga clic en los números de línea en el
“Editor de secuencias de comandos” o mediante la inserción de la palabra debugger
en una línea de código. Para eliminar un punto de interrupción, haga clic en el número
de línea, por segunda vez, o eliminar la palabra debugger. Puede establecer puntos de
interrupción en un script si el depurador está visible.
Puede establecer puntos de interrupción en diferentes lugares hasta del script que
desee. Los puntos de corte se establecen mediante la inserción del debugger, que se
Google Apps Script 29
guardan con el script. Los puntos de corte establecidos por los números de cada línea
no se guardarán de forma automática con tan solo hacer clic sobre ellos.
Mientras que el depurador no tiene puntos de interrupción condicionales, puede escribir
el código que imita el comportamiento de un punto de interrupción condicional. Por
ejemplo, usted podría poner debugger dentro de un IF... más construir, de manera que
el punto de interrupción solo se invoca cuando la condición especificada se cumple:
var x=1
while (true) {
if (x < 10)
debugger
}else
Exit
}
x=x+1
}
o Utilizar los el visor de filtros
El depurador también ofrece un par de filtros de visualización: “Mostrar la
herencia” y “Mostrar todos los datos”. Para obtener esta información, debe hacer clic
en los botones del depurador.
Para comprender el filtro de Mostrar herencia, necesita saber un poco acerca de los
objetos JavaScript y los métodos. Cuando se crea un nuevo tipo de objeto, este se basa
en un tipo existente que se predefine, lo que podría ser uno de los fundamentos básicos
de JavaScript. Su nuevo objeto no solo hereda los métodos y propiedades de ella, sino
que añade sus propios métodos y propiedades únicas. Por ejemplo, cualquier objeto
String hereda los métodos y las propiedades de la cadena.
Al hacer clic en “Mostrar herencia”, se muestran los objetos actuales y toda la cadena
de la herencia en la jerarquía de objetos. Por lo general, usted no necesita esta
cantidad de información acerca de los objetos en sus programas.
Al hacer clic en “Mostrar todos los datos” (botón que hay junto al botón “Mostrar
herencia”), nos mostrará todos los objetos estándares y métodos disponibles para la
máquina virtual de JavaScript.
1.2.3 Programación de tareas comunes
Esta sección proporciona información acerca de cómo realizar algunas tareas comunes
que se quiere lograr a través de Google Apps Script. En algunos casos, vamos a apuntar
a clases particulares existentes que se puede trabajar para aprender las habilidades.
Google Apps Script 30
a) Creación de Menús personalizados y mensajes Pop-up
Es fácil agregar un menú personalizado a una hoja de cálculo y vincular las funciones
específicas de su script con los elementos del menú. He aquí un ejemplo simple. Se
añade un menú llamado Surprises a la barra de menús. El menú tiene dos elementos,
una Surprises 1 y otra Surprises 2. Al elegir uno de los elementos del menú, las funciones
aparecen en un cuadro de mensaje.
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "Surprise 1", functionName: "menuItem1"},
{name: "Surprise 2", functionName: "menuItem2"} ];
ss.addMenu("Surprises", menuEntries);
}
function menuItem1() {
Browser.msgBox("You clicked Surprise 1 on the menu!");
}
function menuItem2() {
Browser.msgBox("Surprise! Surprise!")
}
Por lo general, se desea que el menú personalizado se muestre en cuanto se abra la
hoja de cálculo. Para ello, incluyen un onOpen, función en el script. Estas funciones se
ejecutan tan pronto como la hoja de cálculo se abre, y son útiles para llenar una hoja
de cálculo con los menús y datos que el usuario desea ver de inmediato.
En el script de ejemplo, las entradas del menú se definen en el siguiente código:
var menuEntries = [ {name: "Surprise 1", functionName: "menuItem1"},
{name: "Surprise 2", functionName: "menuItem2"} ];
La variable menuEntries contiene una serie de objetos. Cada objeto contiene un par de
valores para el nombre y las claves de nombre de la función. Un arreglo es una
colección de elementos que funciona algo así como una hoja de cálculo.
Cada elemento de una matriz puede ser identificado por su ubicación en la matriz,
denominado punto de índice. Arrays en JavaScript y Google Apps Script están basados
en cero, es decir, el primer elemento que se conoce como 0, no
1. Por ejemplo, si se crea una matriz de medición de tres elementos por dos elementos,
la primera posición se conoce como 0,0. Las matrices son una manera conveniente de
almacenar y manipular datos en un programa de ordenamiento o secuencias de
comandos.
Se puede decir que los elementos del menú se encuentran en una serie, a causa de los
corchetes que encerraban los nombres de los menús y funciones.
Google Apps Script 31
Cada elemento del menú se coloca dentro de las llaves, y esto define la sintaxis de
cada par de nombre y el nombre de función como un objeto.
Después de la definición de las entradas del menú, viene la definición del propio menú:
ss.addMenu("Surprises", menuEntries);
La etiqueta del menú es Sorprises. menuEntries es un parámetro para el método
AgregarMenú, que pasa en los valores de la matriz que define los nombres de los
elementos de menú y las funciones de los elementos del menú que se encuentran
vinculados.
Aquí está el código general para la creación de elementos de menú y un menú.
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "item_name_1", functionName: "function_1"},
{name: "item_name_2", functionName: "function_2"},
{name: "item_name_n", functionName: "function_n"];
ss.addMenu("menu_name", menuEntries);
}
El siguiente código aparece en un cuadro de mensaje cuando un usuario selecciona un
elemento del menú:
function menuItem1()
Browser.msgBox("You clicked Surprise 1 on the menu!");
Generalizando el código sería:
function yourFunctionName() {
Browser.msgBox("message_to_display" );
Para dar a la función del nombre que utilizó en la matriz menuEntries, entonces llame al
método msgBox en la clase Browser, pasando como parámetro el mensaje que desea
mostrar.
b) Optimización scripts para un mejor rendimiento
Para lograr la optimización de nuestros scripts y buscar un mejor rendimiento, vamos a
tomar como base dos principios:
Minimizar las llamadas a otros servicios.
Google Apps Script 32
Utilice operaciones por lotes siempre que pueda.
Las siguientes dos secciones dan un mejor detalle de estos principios:
Minimizar las llamadas a otros servicios.
Las operaciones de JavaScript son considerablemente más rápidas que el de
comunicarse con otros servicios. Cualquier cosa que usted puede lograr dentro de
Google Apps Script, en sí, será mucho más rápido que la realización de llamadas a las
hojas de cálculo, documentos, sitios, traducciones, y así sucesivamente. Por lo tanto, las
secuencias de comandos se ejecutarán más rápido, si usted puede encontrar maneras
de reducir al mínimo las llamadas de los scripts a los servicios.
Utilizando operaciones por lotes
Los scripts comúnmente necesitan leer los datos de una hoja de cálculo, realizar
cálculos, y luego escribir los resultados de los datos a otra hoja de cálculo. En Google
Apps, se ha incorporado look-ahead cache que nos sirve para optimizar dicho punto
para recuperar lo que un script es probable que obtenga y la caché de escritura salve
lo que se determine.
Usted puede escribir scripts para aprovechar al máximo el almacenamiento en caché,
reduciendo al mínimo el número de lecturas y escrituras. Alternando la lectura y
escritura de comandos. Para aumentar la velocidad de escritura, leer todos los datos en
una matriz con un solo comando, realizar cualquier operación en los datos de la matriz,
y escribir los datos con un solo comando.
He aquí un ejemplo -un ejemplo que no se recomienda seguir ni usar. El script de hoja
de cálculo de Fractal Art scriptl en la Galería utiliza el siguiente código para establecer
los colores de fondo de cada celda en una cuadrícula de 100 x 100 hojas de cálculo:
// DO NOT USE THIS CODE. It is an example of SLOW, INEFFICIENT code.
// FOR DEMONSTRATION ONLY.
var cell = sheet.getRange('a1');
for (var y = 0; y < 100; y++) {
xcoord = xmin;
for (var x = 0; x < 100; x++) {
var c = getColor_(xcoord, ycoord);
cell.offset(y, x).setBackgroundColor(c);
xcoord += xincrement;
}
ycoord -= yincrement;
SpreadsheetApp.flush();
}
El script es ineficiente: se realiza un bucle a través de 100 filas y 100 columnas, la escritura
consecutiva a 10.000 células. The Script Aplicaciones write-back cache ayuda, porque
obliga al uso de write-back flush al final de cada línea. Debido al almacenamiento en
caché, sólo hay 100 llamadas a la hoja de cálculo.
Google Apps Script 33
Sin embargo, el código se puede hacer mucho más eficiente si utilizamos llamadas por
lotes. Aquí está una nueva versión en la que se lee el rango de celdas en una matriz
llamada colores, la operación de asignación de color se realiza en los datos de la
matriz, y los valores de la matriz se escriben en la hoja de cálculo:
// OKAY TO USE THIS EXAMPLE or code based on it.
var cell = sheet.getRange('a1');
var colors = new Array(100);
for (var y = 0; y < 100; y++) {
xcoord = xmin;
colors[y] = new Array(100);
for (var x = 0; x < 100; x++) {
colors[y][x] = getColor_(xcoord, ycoord);
xcoord += xincrement;
}
ycoord -= yincrement;
}
sheet.getRange(1, 1, 100, 100).setBackgroundColors(colors);
El código ineficiente toma cerca de 70 segundos para correr. El código eficiente se
ejecuta en apenas 1 segundo. Si usted está buscando en el script de la hoja de cálculo
de Fractal Art script, reestructuraré la sintaxis en la secuencia del script, a fin de buscar el
mejor rendimiento para que este ejemplo sea más fácil de seguir. El script que se
publica utiliza la llamada setBackgroundRGB, en lugar de setBackgroundColor, que
puede ver más arriba. La función getColor_ fue cambiado de la siguiente manera:
if (iteration == max_iteration) {
return "#000000";
} else {
var c = 255 - (iteration * 5);
c = Math.min(255, Math.max(0, c));
var hex = Number(c).toString(16);
while (hex.length < 2)
hex = "0" + hex;
return ("#"+hex+"3280");
}
c) Envío de correo electrónico utilizando un script
Para realizar dicha funcionalidad, podemos revisar los apartados que se encuentran en
los siguientes puntos:
<Envío de correo electrónico de una hoja de cálculo>
<Simple Mail fusión>
Google Apps Script 34
Revise los enlaces de interés del curso para ver cada punto mencionado.
1.2.4 Eventos
a) Ejecución de scripts en respuesta a un evento
Es posible que usted desee que un script se ejecute cada día a una determinada hora,
o que pueda tener un script que se debe ejecutar después de que un usuario envíe un
formulario de recopilación de datos.
Google Apps Script proporciona manejadores de eventos simples y manejadores de
eventos instalables, que son maneras fáciles para que especifique las funciones a
ejecutar en un momento determinado o en respuesta a un evento.
Antes de examinar los detalles de cada sistema y las diferencias entre ellos, vamos a
considerar la terminología que usamos para los eventos. Un caso es, generalmente,
considerado como el que pasó. Por ejemplo, he aquí algunos hechos:
El reloj dio la una.
La hoja de cálculo se abrió.
La hoja de cálculo ha sido editado.
El formulario se envió.
En Google Apps Script, como en la mayoría de los lenguajes de programación,
estos eventos también son conocidos como factores desencadenantes de eventos, o
simplemente disparador (triggers). El código se llama, en respuesta al evento,
un controlador de eventos.
A menudo, aunque no siempre, el código pasa un atributo al controlador de
eventos que describe el evento, y este atributo también se conoce como parte
el evento.
b) Manejador de eventos simples
Los manejadores de eventos simples están integrados en el lenguaje de Google Apps
Script. Para utilizar controladores de eventos, debe dar a su función un nombre especial
que denote el tipo de evento que ejecute la función. Utilice los controladores de
eventos simples para ejecutar un script o una función en las siguientes circunstancias:
Cuando un script se instala desde la “Galería de Script”, con la función onInstall .
Cuando una hoja de cálculo se abre, con la función onOpen .
Cuando una hoja de cálculo se modifica, con la función onEdit.
Estos controladores de eventos simples se ejecutan en respuesta a las acciones en el
editor de hojas de cálculo, y se ejecutan con el mismo contexto de usuario. Por ejemplo,
si Bob abre la hoja de cálculo, la función onOpen se ejecuta como Bob, con
independencia de quien añadió el script de la hoja de cálculo.
Google Apps Script 35
Por esta razón, los controladores de eventos simples están restringidos en lo que se les
permite hacerlo:
La hoja de cálculo que contiene el script debe ser abierto para su edición.
Los controladores de eventos simples no pueden determinar el usuario actual.
Los controladores de eventos simples no pueden acceder a servicios que requieren
autenticación como por ejemplo de usuario. Por ejemplo, el servicio Google Translate
es anónimo y se puede acceder a los controladores de eventos simples. Calendario,
correo y el sitio no son anónimos y los controladores de eventos simples no pueden
acceder a esos servicios.
Los controladores de eventos simples solo pueden modificar la hoja de cálculo
actual. El acceso a otras hojas de cálculo está prohibido.
Para más información sobre eventos de seguridad, consulte en: Descripción de los
permisos y la ejecución de scripts en los enlaces de interés del curso.
onOpen ()
La función onOpen se ejecuta automáticamente cuando un usuario abre una hoja de
cálculo. La función onOpen es más comúnmente utilizada para agregar elementos de
menú personalizados a la barra de menú de la hoja de cálculo.
// The onOpen function is executed automatically every time a Spreadsheet is opened
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];
// When the user selects "addMenuExample" menu, and clicks "Menu Entry 1", the
function function1 is executed.
menuEntries.push({name: "Menu Entry 1", functionName: "function1"});
menuEntries.push({name: "Menu Entry 2", functionName: "function2"});
ss.addMenu("addMenuExample", menuEntries); }
onEdit ()
La función onEdit se ejecuta automáticamente cuando cualquier celda de la hoja de
cálculo se edita. Un caso de uso muy sencillo para onEdit es registrar la modificación de
un dato almacenado en una celda. Guarda la última modificación que se ha
editado. El atributo „E‟ que se pasa a la función contiene una sola propiedad, source,
que es la hoja de cálculo que se está editando.
function onEdit(event)
{
var ss = event.source.getActiveSheet();
var r = event.source.getActiveRange();
r.setComment("Last modified: " + (new Date())); }
Google Apps Script 36
onInstall ()
La función onInstall se invoca cuando un script se instala desde la Galería de Script. El
caso de uso más común para onInstall es el mismo que para onOpen: la creación de
menús personalizados para el usuario. Cuando un script se instala, por primera vez, en
una hoja de cálculo, la función onOpen no puede ser llamado por la hoja de cálculo si
ya está abierto. Si el script tiene que hacer menús o realizar cualquier otra tarea
inmediatamente después de ser instalado, el script puede llamar onOpen de
onInstall. Por ejemplo:
// Call onOpen from onInstall
function onInstall()
{
onOpen();
}
// onOpen will run when the script is subsequently opened
function onOpen()
{
// some code here
}
c) Controlador de eventos instalables
Para instalar manejadores de eventos en los triggers, utilice el Script Editor y mediante su
configuración, realice llamadas a los triggers del documento. Podemos usar triggers
para ejecutar scripts cuando se presente cualquiera de los siguientes eventos:
Cuando una hora determinada llega. Puede definir el tiempo como un año, mes, día
de un mes, el día de la semana, hora, minuto o segundo.
Cuando se envía un registro utilizando formulario.
Cuando una hoja de cálculo se edita. A diferencia de los controladores de eventos
simples onEdit, instalar el controlador de eventos puede actuar como el usuario que
configuró el trigger.
Cuando una hoja de cálculo se abre. A diferencia de los controladores de eventos
simples onOpen, instalar el controlador de eventos puede actuar como el usuario que
configuró el trigger.
Para acceder a la gestión de triggers, nos podemos ubicar en “Herramientas” > “Editor
de secuencia de comandos” > “Triggers”.
Google Apps Script 37
Para obtener más información acerca de la gestión de eventos, puede seguir el enlace
de <Running Scripts in Response to an Event> en los enlaces de interés del curso.
1.2.5 GUI – Interfaz gráfica de usuario
Google Apps Script le ofrece la posibilidad de crear una interfaz de usuario para la
visualización o la captura de información.
Las secuencias de comandos pueden crear una amplia gama de elementos de la
interfaz de usuario, incluyendo pero no limitado a los siguientes:
Los botones.
Los botones de radio.
Botones de selección.
Las casillas de verificación.
Los campos de texto.
Las etiquetas.
Títulos.
Los cuadros de lista.
Los cuadros de diálogo.
Paneles de muchos tipos.
Y elementos mucho más de los que es posible enumerar aquí. En la
sección “Visualización de los elementos de interfaz de usuario disponible”, indica cómo
ver todos los elementos disponibles. También puede revisar la documentación de la API
para esta función.
Después de poner todos estos elementos, el resultado es una interfaz de usuario de
trabajo. Las secuencias de comandos puede mostrar la interfaz de usuario de dos
maneras:
Directamente de un Spreadsheet.
Directamente desde un sitio.
Como un servlet independiente.
Para más información sobre la decisión de cómo mostrar la interfaz, consulte en: decidir
si ejecutar un script desde un spreedsheet o como un servicio.
a) Visualización de los elementos de interfaz de usuario disponible
Usted puede crear un gran número de elementos de la interfaz de usuario, a través de
Google Apps Script.
Para ver todos los elementos disponibles:
1. Abrir una hoja de cálculo de Google.
2. Haga clic en “Herramientas” > “Editor se secuencia de comandos”.
3. Escriba las siguientes instrucciones: no copiar y pegar:
Google Apps Script 38
función myFunction () {
var aplicacion = UiApp . createApplication ();
var boton = aplicacion .
}
Usted ve un menú con todos los elementos disponibles que se pueden crear, así como
los argumentos necesarios para cada elemento. Si usted no ve una lista de menús,
puede ser debido a que se ha pegado en el código. La funcionalidad integrada de
autocompletado de código en el editor, deberá escribir el punto final que sigue a la
aplicación.
b) El diseño de la interfaz de usuario
Antes de empezar a escribir el script para mostrar la interfaz de usuario, haga lo
siguiente:
1. Plan del Script. ¿Qué tareas debe realizar el script?
2. Escriba la información específica que desea mostrar o cobrar a sus usuarios.
3. Dibujar la interfaz de usuario y hacer notas acerca de todos los elementos de la
interfaz que debe crear con su script.
4. Determine lo que el script y la interfaz debe hacer en respuesta a la intervención del
usuario.
5. Determinar las condiciones para salir del script.
c) Creación de elementos de la inferfaz de usuario
Antes de que pueda crear elementos de interfaz de usuario, tales como botones o
cuadros de diálogo, se necesita un UiApp objeto de la aplicación que contiene los
elementos de interfaz de usuario. Después de crear la UiApp objeto de aplicación,
puede agregar botones, cuadros de diálogo, paneles y otros elementos a
la UiApp objeto de aplicación.
La sintaxis general para estas operaciones es el siguiente:
Para crear un UiApp objeto de aplicación, utilice la
sintaxis var your_application_object_name UiApp.createApplication=();
donde your_application_object_name es el nombre que se asigna.
Para crear un elemento de la interfaz de usuario y asociarlo con su UiApp objeto de
aplicación, utilice la sintaxis
var your_ui_element_name =your_application_object_name.createElement_Name ();
Para agregar un elemento de la interfaz de usuario a otro, por ejemplo para mostrar un
botón en un panel, utilice la sintaxis
your_ui_element_name1.add( your_ui_element_name2);
La siguiente sentencia crea un objeto de aplicación llamada myApp llamando
al createApplication método de la clase UiApp:
Google Apps Script 39
var myapp = UiApp . createApplication ( );
Ahora puede crear algunos elementos de la interfaz de usuario. Aquí hay un botón con
el texto “Press Me” en él:
var myButton = myapp . createButton ( 'Press Me' );
El texto que desea mostrar en un botón se pasa como un argumento.
Es posible que desee un grupo que contenga el botón. El siguiente, crea un panel
vertical.
var MyPanel = myapp . createVerticalPanel ( );
Hay otros tipos de paneles, también: paneles pop-up, paneles de pila, los paneles de
enfoque, paneles de formato, y así sucesivamente.
Aquí está el código para mostrar el botón en el panel:
MyPanel . add ( myButton );
A continuación, añadir el panel de la aplicación:
myapp . add ( MyPanel );
Por último, es necesario instruir a Google Apps Script para mostrar los elementos de la
interfaz:
show ( Myapp );
Puede crear los elementos de la interfaz de usuario en cualquier orden. El orden en que
se agregan los elementos a los objetos determina el orden de presentación. Por
ejemplo, si crea un objeto VerticalPanel, y añade elementos a, b, c, en el panel, los
elementos se muestran de arriba a abajo, en ese orden.
Google Apps Script 40
Sin embargo, usted puede crear a, b, y c en cualquier orden. La creación de elementos
y agregarlos a su aplicación, son pasos separados que requieren instrucciones por
separado.
He aquí un pequeño script que no hace más que mostrar un panel con un botón en
él. Puedes seguir lo que hace cada línea en los comentarios.
function myAppFunction() { // Name the function
// Read the current Spreadsheet into mydoc
var mydoc = SpreadsheetApp.getActiveSpreadsheet();
// Create the UiApp object myapp and set the title text
var myapp = UiApp.createApplication().setTitle('Here is the title bar');
// Create a button called mybutton and set the button text
var mybutton = myapp.createButton('Here is a button');
// Create a vertical panel called mypanel and add it to myapp
var mypanel = myapp.createVerticalPanel();
// Add mybutton to mypanel
mypanel.add(mybutton);
// Add my panel to myapp
myapp.add(mypanel);
// Use the show() method on the Spreadsheet to display the UiApp object and all
elements associated with it.
mydoc.show(myapp); }
Puede encadenar métodos setter, que son métodos que establecen los valores a los
objetos. En el programa anterior, la instrucción var myApp = UiApp.createApplication( ).
setTitle („Here is the title bar‟); crea un objeto UiApp y establece su título. Usted también
puede configurar el tamaño del objeto:
var myapp = UiApp . createApplication( ) . setTitle ( "Here is the title bar" ). setHeight ( 50
). setWidth ( 100 );
Aquí hay otro pequeño script que muestra un panel, pero no hace nada más. Muestra
cómo utiliza el grid de objetos y el método setWidget para crear un diseño más
complejo, también cómo crear cuadros de texto y la etiqueta de ellos. Se puede
introducir texto en los cuadros de texto, pero al presionar el botón no hace nada.
El tamaño de la cuadrícula de 3 x 2 se define en la instrucción var myGrid =
myapp.createGrid (3, 2), y cada método setWidget define el elemento que se muestra
Google Apps Script 41
en cada posición dentro de la cuadrícula. Tenga en cuenta las definiciones de la
posición al utilizar un índice basado en cero, por lo que las filas se identifican con los
números 0, 1 y 2 en lugar de 1, 2 y 3.
function demoUI() {
var mydoc = SpreadsheetApp.getActiveSpreadsheet();
var myapp = UiApp.createApplication().setTitle('An improved GUI');
var mygrid = myapp.createGrid(3, 2);
mygrid.setWidget(0, 0, myapp.createLabel('Name:'));
mygrid.setWidget(0, 1, myapp.createTextBox());
mygrid.setWidget(1, 0, myapp.createLabel('Age:'));
mygrid.setWidget(1, 1, myapp.createTextBox());
mygrid.setWidget(2, 0, myapp.createLabel('City'));
mygrid.setWidget(2, 1, myapp.createTextBox());
var mybutton = myapp.createButton('Press me');
var mypanel = myapp.createVerticalPanel();
mypanel.add(mygrid);
mypanel.add(mybutton);
myapp.add(mypanel);
mydoc.show(myapp);
}
d) La actualización de una hoja de cálculo de la interfaz de usuario
Los dos scripts en la sección de “Creación de elementos de la interfaz de
usuario” muestran un panel con varios controles, pero no hacen nada más. Para hacer
una interfaz de usuario utilizable, necesita la capacidad de actualizar un Spreadsheet
con la información que el usuario entra en la interfaz.
He aquí un pequeño script que responde a una acción en la interfaz mediante la
actualización del spreadsheet. Todo lo que hace es incrementar el valor de la celda A1
en 1 cada vez que haga clic en un botón.
function foo() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication();
var button = app.createButton('submit');
app.add(button);
var handler = app.createServerClickHandler('b');
button.addClickHandler(handler);
doc.show(app);
}
function b() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
Google Apps Script 42
var cell = doc.getRange('a1');
cell.setValue(Number(cell.getValue()) + 1);
var app = UiApp.getActiveApplication();
app.close();
// The following line is REQUIRED for the widget to actually close.
return app;
}
Cuando se copia esto y se ejecuta en el “Editor de Scripts”, encontrará que tiene que
volver a ejecutar la función para visualizar el panel con el botón por cada vez que lo
presione. Eso es porque no hay una estructura de bucle en el script para mantener el
panel mostrado y activo. En cambio, el panel desaparece cuando llega a las
instrucciones app.close (); y return app;
Ya está familiarizado con el código de la función foo () de las secciones anteriores de
esta guía. Las nuevas instrucciones son las siguientes:
var handler = app.createServerClickHandler('b');
button.addClickHandler(handler);
La instrucción var handler = app.createServerClickHandler ('b'); crea controlador del
click del lado del server llamado handler como parte de la aplicación UiApp
llamada app. Un controlador (handler) de clic realiza una acción en respuesta a un clic
de mouse. Del lado del servidor, significa que las acciones son realizadas por un servidor,
en este caso, el servidor de Google Apps Script. El argumento ('b') significa que el
controlador de acción se va a ejecutar la function B ( ).Usted puede agregar varios
controladores (handlers) de clic, en un botón. Estos se ejecutan en paralelo.
La instrucción button.addClickHandler (handler) asocia el controlador (handler) de clic
con el objeto botón ya definido, llamado button.
La segunda función en el script, b (), contiene las instrucciones que incrementan el valor
de la celda A1, cierra la aplicación app, y, finalmente, devuelve el script a su punto de
partida.
Aquí hay un script más largo y complejo. Este script recoge algunos datos de los campos
de texto en un panel y escribe la información en el spreadsheet. Vea los comentarios
entre líneas para más detalle.
function foo() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication().setTitle('New form!');
// Create a grid with 3 text boxes and corresponding labels
var grid = app.createGrid(3, 2);
grid.setWidget(0, 0, app.createLabel('Name:'));
Google Apps Script 43
// Text entered in the text box is passed in to userName
grid.setWidget(0, 1, app.createTextBox().setName('userName'));
grid.setWidget(1, 0, app.createLabel('Age:'));
grid.setWidget(1, 1, app.createTextBox().setName('age'));
// Text entered in the text box is passed in to age
grid.setWidget(2, 0, app.createLabel('City'));
grid.setWidget(2, 1, app.createTextBox().setName('city'));
// Text entered in the text box is passed in to city.
// Create a vertical panel..
var panel = app.createVerticalPanel();
// ...and add the grid to the panel
panel.add(grid);
// Create a button and click handler; pass in the grid object as a callback element and
the handler as a click handler
// Identify the function b as the server click handler
var button = app.createButton('submit');
var handler = app.createServerClickHandler('b');
handler.addCallbackElement(grid);
button.addClickHandler(handler);
// Add the button to the panel and the panel to the application, then display the
application app in the Spreadsheet doc
panel.add(button);
app.add(panel);
doc.show(app);
}
// Function that records the values in the Spreadsheet
function b(e) {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var lastRow = doc.getLastRow(); // Determine the last row in the Spreadsheet that
contains any values
var cell = doc.getRange('a1').offset(lastRow, 0); // determine the next free cell in
column A
cell.setValue(e.parameter.userName); // Set the value of the cell to userName
cell.offset(0, 1).setValue(e.parameter.age); // Set the value of the adjacent cell to age
cell.offset(0, 2).setValue(e.parameter.city); // set the value of the next cell to city
// Clean up - get the UiApp object, close it, and return
var app = UiApp.getActiveApplication();
app.close();
// The following line is REQUIRED for the widget to actually close.
Google Apps Script 44
return app;
}
Aquí está el mismo script con funciones adicionales, que permiten al formulario ser
utilizado múltiples veces antes que el usuario decida salir. Los comentarios entre líneas
explican las nuevas instrucciones.
function foo() {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var app = UiApp.createApplication().setTitle('form!');
// Create the entry form, a 3 x 2 grid with text boxes for name, age, and city that is then
added to a vertical panel
var grid = app.createGrid(3, 2);
grid.setWidget(0, 0, app.createLabel('Name:'));
grid.setWidget(0, 1, app.createTextBox().setName('userName').setId('userName'));
grid.setWidget(1, 0, app.createLabel('Age:'));
grid.setWidget(1, 1, app.createTextBox().setName('age').setId('age'));
grid.setWidget(2, 0, app.createLabel('City'));
grid.setWidget(2, 1, app.createTextBox().setName('city').setId('city'));
// Create a vertical panel and add the grid to the panel
var panel = app.createVerticalPanel();
panel.add(grid);
// Here's where this script diverges from the previous script.
// We create a horizontal panel called buttonPanel to hold two buttons, one for
submitting the contents of the form
// to the Spreadsheet, the other to close the form.
var buttonPanel = app.createHorizontalPanel();
// Two buttons get added to buttonPanel: button (for submits) and closeButton (for
closing the form)
// For the submit button we create a server click handler submitHandler and pass
submitHandler to the button as a click handler.
// the function submit gets called when the submit button is clicked.
var button = app.createButton('submit');
var submitHandler = app.createServerClickHandler('submit');
submitHandler.addCallbackElement(grid);
button.addClickHandler(submitHandler);
buttonPanel.add(button);
// For the close button, we create a server click handler closeHandler and pass
closeHandler to the close button as a click handler.
// The function close is called when the close button is clicked.
var closeButton = app.createButton('close');
var closeHandler = app.createServerClickHandler('close');
closeButton.addClickHandler(closeHandler);
buttonPanel.add(closeButton);
// Create label called statusLabel and make it invisible; add buttonPanel and
Google Apps Script 45
statusLabel to the main display panel.
var statusLabel = app.createLabel().setId('status').setVisible(false);
panel.add(statusLabel);
panel.add(buttonPanel);
app.add(panel);
doc.show(app);
}
// Close everything return when the close button is clicked
function close() {
var app = UiApp.getActiveApplication();
app.close();
// The following line is REQUIRED for the widget to actually close.
return app;
}
// function called when submit button is clicked
function submit(e) {
// Write the data in the text boxes back to the Spreadsheet
var doc = SpreadsheetApp.getActiveSpreadsheet();
var lastRow = doc.getLastRow();
var cell = doc.getRange('a1').offset(lastRow, 0);
cell.setValue(e.parameter.userName);
cell.offset(0, 1).setValue(e.parameter.age);
cell.offset(0, 2).setValue(e.parameter.city);
// Clear the values from the text boxes so that new values can be entered
var app = UiApp.getActiveApplication();
app.getElementById('userName').setValue('');
app.getElementById('age').setValue('');
app.getElementById('city').setValue('');
// Make the status line visible and tell the user the possible actions
app.getElementById('status').setVisible(true).setText('User ' + e.parameter.userName + '
entered.
To add another, type in the information and click submit. To exit, click close.');
return app;
}
e) Definiendo si la ejecución de un script se realizará desde un Spreadsheet o como un
servicio.
Usted puede hacer que la interfaz de usuario de un script esté disponible para los
usuarios desde el interior de un Spreadsheet, de un Site o mediante la ejecución por
separado como un servicio. Esta sección describe las diferencias y te dice cómo hacer
la interfaz de usuario como un servicio.
Tenga en cuenta lo siguiente al escribir un código para mostrar una interfaz de usuario:
Un script que ofrece una interfaz de usuario, independiente, debe invocar la función
doGet (e) o la función doPost (e) para un envío de un formulario HTML.
Google Apps Script 46
Un script que provee la interfaz de usuario desde un spreadsheet
invoca doc.show(aprox).
La funcion doGet (e) toma el argumento e, pasando los argumentos para la interfaz
de usuario.
Después de escribir el script, lo publica como un servicio. Durante el proceso de
publicación, se define quién tiene acceso al script.
En un dominio de Google Apps, puede publicar el script, de manera que, solo usted
tenga acceso o todos en el dominio lo tengan.
En una cuenta de usuario de Google, puede publicar el script, de manera que, sólo
usted tenga acceso o que todo el mundo lo tenga.
En los ejemplos en la sección de “Actualización de un spreadsheet de la interfaz de
usuario”, la interfaz de usuario se muestra en el spreadsheet donde se almacena el
script. El siguiente código define la forma en que la interfaz de usuario se muestra:
function showGui( ) {
var doc = SpreadsheetApp.getActiveSpreadsheet();
// create UiApp object named app
var app = UiApp.createApplication().setTitle('my title');
// .... populate app with ui objecs ...
// ..and display the UiApp object from the current spreadsheet
doc.show(app);
}
Aquí está el código esqueleto para la visualización de una interfaz de usuario como un
servicio independiente:
function doGet(e) {
var app = UiApp.createApplication();
// .... populate app with ui objects here ...
return app;
}
La siguiente tabla compara algunos aspectos de las dos formas de mostrar una interfaz
de usuario.
Google Apps Script 47
Método de
visualización
Script se
ejecuta
como
Autor facilita a
los usuarios
Script
puede
hacer
Script tiene
acceso a
Pantalla dentro de
un spreadsheet
El usuario
que
ejecuta el
script
El acceso al
spreadsheet
Lo que el
usuario
puede
hacer
A lo que el
usuario
tiene
acceso
Mostrar como un
servlet
independiente
El autor del
script
Un URL Lo que el
autor
puede
hacer
A lo que el
autor tiene
acceso
f) Publicación de un script como un servicio
Para publicar un script como un servicio y ver el servicio que se ejecuta a partir de un
spreadsheet, cumpla lo siguiente:
En el Editor de secuencias de comandos, haga clic en “Publicar” > “Publicar como
servicio”. Usted verá el siguiente cuadro de diálogo:
Elegir quién tiene acceso al servicio.
Para restringir al acceso solo para usted, marque “Permitir solo a mí mismo
(your_email_address) para utilizar esto”.
Para permitir a otros usuarios en el dominio, marque “Solo otros miembros
de your_domain lo usen”.
1. Marque “Habilitar Servicio” de la casilla de verificación.
2. Copia el URL que se muestra.
3. Haga clic en “Guardar”.
4. Pegue el URL en la barra de direcciones del navegador y
pulse “Entrar” o “Recargar”. Usted ve la interfaz de usuario definido por el script.
Las instrucciones siguientes, suponen que ya ha creado un script en su sitio.
Google Apps Script 48
Para insertar un gadget Apps Script en un sitio de Google y publicar el script como un
servicio, haga lo siguiente:
1. Navegue al sitio.
2. Haga clic en “Editar página”.
3. Haga clic en “Insertar” > “Apps Gadget Script”. Allí, verá un cuadro de diálogo que le
muestra las secuencias de comandos del sitio.
4. Escoja un script y haga clic en “Seleccionar”. Usted verá el panel de inserción de
Gadget App Script.
5. Elija quién tendrá acceso al servicio.
o Para restringir el acceso sólo a usted, marque “Permitir sólo a mí mismo
( your_email_address ) para utilizar este”.
o Para permitir a otros usuarios en el dominio para tener acceso, marque “Sólo otros
miembros de your _domain ingresen a este servicio.
6. Para incluir un borde alrededor del gadget, marque la primera casilla.
7. Para modificar o incluir un título, marque la segunda casilla y, opcionalmente, puede
incluir un título nuevo.
8. Opcionalmente, modifique las dimensiones predeterminadas del gadget.
9. En el cuadro de diálogo, haga clic en “Guardar”.
10. En la página Sitios, haga clic en “Guardar”. La página muestra el gadget y la salida
del script.
g) Google Apps Script & Google Web Toolkit
Cuando se crean y muestran los elementos de la interfaz de usuario Google Apps Script,
utilice el Google Web Toolkit (GWT). No es necesario estar familiarizado con GWT para
utilizar este aspecto de Google Apps Script.
Sin embargo, si está familiarizado con GWT, ya conoce los tipos de objetos que están
disponibles en Google Apps Script y cómo funcionan los setters. Por ejemplo, en la clase
de cuadrícula GWT y también en Google Script Aplicaciones, puede llamar al método
setWidget de la siguiente manera:
setWidget ( row , column , widget );
Hay algunas diferencias sintácticas entre GWT y la escritura de Google Apps. GWT sigue
la sintaxis Java y Google Apps script generalmente sigue la sintaxis de JavaScript. Por
ejemplo, aquí hay un código GWT:
Grid g = new Grid(rows, cols);
g.setVisible(false);
g.setHeight("100px");
Google Apps Script 49
Aquí están las mismas instrucciones en Google Apps Script:
var g = app.createGrid(rows, cols);
g.setVisible(false);
g.setHeight("100px");
Por cada objeto que GWT podría crear, utilice new XYZ en GWT. Google Apps Script
tiene un método equivalente: create XYZ.
1.2.6 GUI Builder
Esta sección contiene información básica sobre la creación de una interfaz de usuario
en Apps Script usando el GUI Builder.
a) Descripción general de la GUI Builder
La GUI Builder es una herramienta en el editor de Apps Script que permite a los usuarios
armar una interfaz de usuario sin necesidad de escribir código. Se trata de una
alternativa al uso de los Servicios Ui. Usted ensambla la interfaz de usuario eligiendo los
widgets, construyendo bloques de cualquier interfaz de usuario, desde la paleta de la
interfaz de usuario y arrastrándolos a un panel central, llamado el canvas (lienzo).
A continuación, se modifican las propiedades de cada widget en el panel de
propiedades. Una interfaz creada utilizando el GUI Builder solo puede ser utilizada por la
script para la interfaz de usuario que fue creada. El Constructor de GUI se compone de
tres partes.
La barra lateral de la izquierda es la paleta de la interfaz de usuario (ver el
diagrama abajo).
La sección principal es el “Canvas” disponible, donde la interfaz de widgets se
ensambla.
La sección en el extremo derecho es el panel de propiedades.
Google Apps Script 50
Cuando los widgets son seleccionados en el canvas (lienzo), el panel de propiedades
refleja las propiedades asociadas con los widgets. Los usuarios pueden utilizar este panel
de propiedades para configurar cada widget.
b) Apertura de la GUI Builder
El Constructor de GUI es accedido desde el editor de Scripts. Se inicia el Editor de scripts
mediante la apertura de un Spreadsheet existente o sitio, o creando un nuevo
spreadsheet o sitio. Para iniciar el editor de script de un spreadsheet,
seleccione “Herramientas” > “Editor de Scripts” > “Archivo” > “Crear una interfaz de
usuario”. El constructor de interfaz gráfica de usuario se abrirá en una pestaña del
navegador.
c) Usar el GUI Builder
Para montar una interfaz de usuario, arrastre un widget de la paleta de la interfaz de
usuario al canvas. Esta paleta de la interfaz de usuario muestra los widgets de interfaz de
usuario disponible. Para configurar un widget, selecciónelo en el canvas. A
continuación, modifique las propiedades mediante el panel de propiedades.
d) Guardar una interfaz de usuario
Para guardar la interfaz de usuario recién creada, haga clic en “Guardar” y dé a la
interfaz de usuario un nombre. Luego utilizará ese nombre cuando incluya la interfaz de
usuario en su script.
e) Insertar una interfaz de usuario en un Script
Para incorporar una interfaz de usuario en un script, utilice el método loadComponent
(GUI_NAME) en una función. En el siguiente ejemplo, la interfaz de usuario MyGui se
incorpora en el script. Para mostrar la interfaz de usuario independientemente, utilice
return app, y publique el script como un servicio.
function doGet() {
var app = UiApp.createApplication();
app.add(app.loadComponent("MyGui"));
return app;
}
Para mostrar la interfaz de usuario de un Spreadsheet.
function myFunction() {
var app = UiApp.createApplication();
app.add(app.loadComponent("MyGui"));
SpreadsheetApp.getActiveSpreadsheet().show(app);
}
Google Apps Script 51
f) Expandir la interfaz de usuario
Usted puede fácilmente expandir y modificar la interfaz de usuario creada usando el
GUI Builder. Luego de que cargue la interfaz de usuario usando
app.loadComponent(...), agregue nuevos widgets y estilos.
El siguiente ejemplo muestra cómo agregar nuevos widgets.
function doGet() {
var app = UiApp.createApplication();
app.add(app.loadComponent("MyGui"));
var panel = app.getElementById("Panel1");
// use the widget's id from the builder with getElementById
panel.add(app.createButton("a new button!"));
return app;
,}
1.2.7 Modelo de seguridad
Google Apps Script tiene un modelo de seguridad robusto para proteger sus datos que
vamos a definir por los siguientes puntos:
Un script que se ejecuta, solo puede acceder a la información en las aplicaciones de
Google y servicios a los que tiene derechos de acceso. Por ejemplo, si usted tiene la
posibilidad de colocar una entrada en el calendario de otra persona, su script
ejecutada también puede colocar una entrada en el calendario de esa persona. Si
usted no puede tener acceso al calendario de alguien, por ejemplo, si el calendario
no se comparte con usted, su script ejecutada no puede colocar una entrada en el
calendario de esa persona.
Debe conceder, explícitamente, los derechos de acceso a cualquier script que al
ejecutarse tenga acceso a cualquier aplicación que contenga datos privados, por
ejemplo, calendario y correo electrónico.
Debe conceder, explícitamente, los derechos de acceso a cualquier script escrito por
otra persona o compartido con usted. Por ejemplo, cuando hace una copia de un
Spreadsheet que contiene un script.
Una función no puede acceder a sus datos privados (por ejemplo, el Google
Calendar), a menos que haya otorgado explícitamente los derechos.
Funciones personalizadas y manejadoras de eventos simples que funcionan sin
autorización no pueden acceder a todo lo que requeriría una autorización.
Todos los scripts que se agregan a un Spreadsheet tienen acceso al Spreadsheet, ya
sea si se instalan de la Galería de Script o lo hagan por su propia cuenta utilizando el
Editor de Script.
Google Apps Script 52
Análisis de Permisos y Ejecución de Scripts
La siguiente tabla describe las acciones que los individuos con niveles de permisos
diferentes pueden realizar con respecto a una secuencia de comandos en un
Spreadsheet.
Propietario de
un script
Lector
de un
Script
Editor de un script Ejecutar
un script
Propietario del
Spreadsheet
El propietario del
Spreadsheet es la
persona que creó el
Spreadsheet, ya sea
por empezar un nuevo
Spreadsheet o hacer
una copia de un
Spreadsheet existente.
Pueden crear
nuevos scripts
y luego será el
propietario de
dichos scripts.
Sí
Scripts que el
dueño del
Spreadsheet es
propietario.
Scripts
compartidos con
el propietario del
Spreadsheet por
otros.
Sí
Editor de Spreadsheet
Un editor de
Spreadsheet es alguien
a quien el propietario
del Spreadsheet le ha
otorgado derechos de
edición.
Pueden crear
nuevos scripts
y luego será el
propietario de
dichos scripts.
Sí
Scripts que el
Editor de
Spreadsheet es
propietario.
Script compartido
con el editor de
Spreadsheet por
otros.
Sí
Espectador de
Spreadsheet
Un lector de
Spreadsheet es alguien
a quien el propietario
del Spreadsheet ha
concedido los
derechos de
visualización.
No puede
crear nuevos
scripts.
No No No
Propietario del Script
Un propietario de un
Script es el propietario
del Spreadsheet o el
editor del Spreadsheet.
Propietario de
los scripts que
crea.
Sí
Solo las scripts del
propietario de la
script
Sí
Permisos para la ejecución del Script
Cuando un script se invoca haciendo clic en un elemento de menú o una imagen, el
script se ejecuta bajo la identidad de la persona que se ha registrado y ha hecho clic
en el elemento de menú o la imagen. Esta persona debe ser el propietario del
Spreadsheet o el editor del mismo.
Google Apps Script 53
Las funciones personalizadas se ejecutan de forma anónima, cuando el Spreadsheet se
edita. Las funciones de scripts personalizados no tienen acceso a datos específicos del
usuario. Por ejemplo, si un usuario cambia un valor en una celda donde hay una función
personalizada, cuando el Spreadsheet se guarda, muestra que la revisión fue hecha por
un usuario anónimo.
Permisos para la ejecución de eventos
Eventos simples, tales como onOpen, onEdit y onInstall se ejecutan bajo la identidad del
usuario que opera el Spreadsheet. Eventos instalables (triggers de Spreadsheet) se
ejecutan bajo la identidad del usuario que ha creado los triggers.
Entendiendo la ejecución de Time-Driven triggers
Los time-driven triggers son privados. Para instalar un trigger, el usuario debe tener al
menos permisos de sólo lectura del script, es decir, el usuario debe ser capaz de abrir el
script en el editor de script. Los triggers no pueden ser compartidos,
independientemente de si el Script ha sido compartido o no.
Cuando un script se activa, se ejecuta bajo la identidad del propietario del trigger, que
es la persona que instaló el trigger.
Permisos para ejecutar un script como un servicio
El propietario del Script tiene permiso exclusivo para publicar un script como un
servicio. Un Script publicado como un servicio se ejecuta bajo la identidad del
propietario del script.
Asignar derechos de acceso
Cuando se instala un nuevo script de la Galería de Scripts o se copia de un Spreadsheet
que contiene un script que no escribió o ejecuta cualquier script por primera vez,
incluidas las que usted escribió, se le pide expresamente dar al script el permiso de
acceso a los servicios que está intentando utilizar. Usted ve el cuadro de diálogo de
autorización de seguridad, que establece el nombre del Script, el propietario y los
servicios a los que el script requiere el acceso:
Usted también podría ver el siguiente cuadro de diálogo, en el que el script solicita
acceso a un servicio o una aplicación especifica de Google:
Google Apps Script 54
Anulación de los derechos de acceso
Si el Script que escribió o ejecutó se queda sin acceso a sus datos y requiere
autorización para el acceso, se puede anular el acceso que script.
Para revocar el acceso de un script, cumpla lo siguiente:
1. En el navegador, en el que está registrado con su cuenta Gmail de usuario o de
dominio, vaya a Google.com.
2. En el menú desplegable “Configuración” o el etiquetado con su dirección de correo
electrónico, haga clic en “Configuración de la cuenta de Google”.
3. En la sección “Seguridad”, haga clic en “Cambiar sitios web autorizados”. Verá una
lista de sitios web autorizados que incluye un Script de Google Apps.
4. Haga clic en el enlace “Revocar Acceso” para cualquier Script cuya autorización
desee revocar.
a) Restricciones de seguridad en funciones personalizadas y controladores de eventos
Los Scripts que escribe a través de Google Apps Scripts pueden hacer todo tipo de
cosas, pero no todas las funcionalidades están disponibles en todas las circunstancias.
Las funciones personalizadas son funciones que se ejecutan cada vez que un
Spreadsheet se recalcula. Por ejemplo, el Script Oracle of Bacon discutido en el tutorial
de XML utiliza la función personalizada = kb ( actor1 , actor2 ). Las funciones
personalizadas pueden leer datos del Spreadsheet actual y pueden llamar a los servicios
anónimos como SOAP, UrlFetch y Traductor de Google. Un servicio no específico es un
servicio que no requiere credenciales de usuario para funcionar. Un servicio específico
del usuario es un servicio que está ligado a un determinado usuario, como Google
Calendar. Los Servicios específicos del usuario pueden almacenar los datos privados,
tales como el Calendar, o puede actuar como el usuario, en el envío de correo
electrónico.
Las funciones personalizadas y todos los controladores de eventos simples se ejecutan
de manera silenciosa y no se les permite el acceso a los servicios específicos del
usuario. Apps Script no permite que las funciones personalizadas puedan obtener
Google Apps Script 55
acceso a datos privados de un usuario, por ejemplo el Calendar, Gmail, o de los
Sites. Las funciones personalizadas tampoco pueden escribir a otra Spreadsheet que no
sea una con retorno de valor. Las funciones personalizadas solo pueden escribir en la
celda en la que se colocan.
La función onEdit funciona de manera similar a las funciones personalizadas. La función
onEdit se ejecuta de manera silenciosa y el Google Apps Script no permite que
la función onEdit tenga acceso a los datos del usuario. La función onEdit puede llamar
a los servicios no específicos, tales como SOAP y UrlFetch. Además, la función onEdit
puede escribir en cualquier celda del Spreadsheet.
Las funciones onOpen y onInstall también funcionan de manera silenciosa. Por lo
general, estas funciones se utilizan sólo para instalar los menús y opciones del menú o
para rellenar un Spreadsheet con datos o columnas o encabezados de filas.
b) Uso de varias cuentas de Google
Google Docs no permite utilizar varias cuentas de Google en el mismo navegador al
mismo tiempo, ya sean cuentas públicas de Gmail o cuentas de Google Apps. Usted
podría encontrarse con un problema si sigue esta secuencia de acciones:
1. Que se conecte a una cuenta de Google, por ejemplo, [email protected].
2. Si abre un Spreadsheet e inicia el editor de script. Tanto el Script como el Spreadsheet
indican que está conectado como account1.
3. Cierre el editor de Script y se desconecta de account1.
4. Se conecta con otra cuenta de Google, por ejemplo, [email protected].
5. Abra un Spreadsheet e inicie el editor de script. El Spreadsheet indica que está
conectado como account2, pero el editor de script indica que está conectado
como account1.
6. Guarda el script.
En esta situación, salga de la cuenta actual, borre las cookies de su navegador, y
reinicie el navegador. Google Docs se comporta de esta manera cuando vuelva a
entrar:
Si usted vuelve a entrar utilizando account1, tiene acceso al Script guardado y es
capaz de editarlo.
Si usted vuelve a entrar utilizando account2, puede cargar el script guardado, pero no
lo puede editar. El Script es propiedad de account1 y un candado aparece junto al
Script.
1.2.8 Solución de problemas y depuración de scripts
En esta sección, se analizan algunas formas básicas de solucionar los problemas que
encuentre en sus Scripts.
Google Apps Script 56
Cuotas
Google Apps Script impone cuotas a las diferentes acciones realizadas por los
scripts. Por ejemplo, puede encontrarse con un límite en el número de mensajes de
correo electrónico que puede enviar su script. Si el script llega al límite establecido por la
cuota, aparecerá un mensaje similar al siguiente: Service invoked too many times: email
Las cuotas se establecen en diferentes niveles para usuario, dominio y cuentas de primer
nivel. Las cuotas están sujetas a cambio en cualquier momento sin previo aviso por
Google.
Si se encuentra con una cuota, y cree que en su caso se justifica un incremento en la
cuota, por favor, póngase en contacto con el equipo de Google Apps script mediante
el Google Apps Script Help Forum (Foro de ayuda de Google Apps Script). El equipo
revisará su situación y se contactará con usted.
Interpretación de mensajes de error
Cuando Google Apps Script no es capaz de ejecutar un script, es usual ver un mensaje
de error. Todos los mensajes de error incluyen la línea de código en el que se encontró el
error y una breve descripción del error en particular. En la mayoría de los casos, el
mensaje de error es fácil de entender y se refiere a un error concreto en el Script.
Por ejemplo, considere el script de ejemplo para agregar un menú personalizado y
elementos de menú de un Spreadsheet:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [ {name: "Surprise 1", functionName: "menuItem1"},
{name: "Surprise 2", functionName: "menuItem2"} ];
ss.addMenu("Surprises", menuEntries);
}
function menuItem1() {
Browser.msgBox("You clicked Surprise 1 on the menu!");
}
function menuItem2() {
Browser.msgBox("Surprise! Surprise!")
}
¿Qué pasaría si el script define el menú antes de definir los elementos que aparecen en
el menú? La primera función sería la siguiente:
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.addMenu("Surprises", menuEntries);
var menuEntries = [ {name: "Surprise 1", functionName: "menuItem1"},
{name: "Surprise 2", functionName: "menuItem2"} ];
}
Google Apps Script 57
La próxima vez que abra el Spreadsheet, el nuevo menú, Surprises, nunca aparecerá. Si
se abre el Editor de secuencias de comandos, haga clic en “Ejecutar” > “onOpen”. De
esta manera, aparecerá un mensaje de error:
Cannot find method addMenu(string,Undefined). (#3)
El número al final, es el número de línea donde Google Apps Scripts encuentra el error. El
script no es capaz de ejecutar el método addMenu porque el método espera dos
argumentos y el segundo argumento, menuEntries , no se define hasta la cuarta línea
del script. Es por eso que ss.addMenu ("Surprises", menuEntries); debe venir luego de la
definición de menuEntries en el script.
Por lo general, el mensaje de error que verá será fácil de entender. Algunos errores
resultarán en un mensaje de error más genérico como el siguiente: Server not available.
o Server error occurred, please try again.
Es inusual que un servidor de Google no esté disponible. Si ve este mensaje, puede
esperar unos minutos y ejecutar el script de nuevo. Si observa el mismo mensaje de error,
probablemente, signifique que hay un error en el script, pero no corresponde a ningún
mensaje de error específico, por lo que está viendo un mensaje de error para todo
propósito (genérico). En este punto, empiece a tratar de depurar el script. Puede avisar
estos errores en el Foro de Google Apps Script.
Para obtener más información acerca de la depuración de scripts, puede seguir
revisando Troubleshooting and Debugging Scripts en enlaces de interés del curso.
1.3 Aplicaciones Apps Script
La sección de tutoriales publicados dentro de la sección de Google Apps Script en
code.google.com, hacen referencia a describir por niveles diversos ejemplos que
pueden describir un marco más claro para todo aquel que está comenzando a
desarrollar con Google Apps Script.
Los niveles que presenta son:
Google Apps Script 58
Programando nuestros
primero scripts.
Funciones personalizadas.
Definición de Menú en
Spreadsheet.
Envío de correos desde un
Spreadsheet.
UI services.
Lectura y escritura de datos
de spreadsheets utilizando
objetos de JS.
Creación de un Google Site.
Interactuar con Documents
Lists.
Utilizando el depurador, etc.
Analisis de documentos con
XML.
Interactuando con Google
App Engine
Utilización de SOAP.
Automatización de flujo de
trabajo tipo Help Desk, etc.
Para ver los detalles de cada nivel, se sugiere acceder a la sección de enlaces de
interés del curso y revisar los tutoriales en mención.