2 mi separata

60
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

Upload: dennis-castillo

Post on 11-Aug-2015

174 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: 2 MI Separata

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

Page 2: 2 MI Separata

Í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

Page 3: 2 MI Separata

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.

Page 4: 2 MI Separata

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.

Page 5: 2 MI Separata

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.

Page 6: 2 MI Separata

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.

Page 7: 2 MI Separata

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:

Page 8: 2 MI Separata

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.

Page 9: 2 MI Separata

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.

Page 10: 2 MI Separata

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.

Page 11: 2 MI Separata

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

Page 12: 2 MI Separata

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.

Page 13: 2 MI Separata

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:

Page 14: 2 MI Separata

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:

Page 15: 2 MI Separata

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.

Page 16: 2 MI Separata

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”.

Page 17: 2 MI Separata

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”.

Page 18: 2 MI Separata

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.

Page 19: 2 MI Separata

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.

Page 20: 2 MI Separata

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.

Page 21: 2 MI Separata

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.

Page 22: 2 MI Separata

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.

Page 23: 2 MI Separata

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.

Page 24: 2 MI Separata

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:

Page 25: 2 MI Separata

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.

Page 26: 2 MI Separata

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.

Page 27: 2 MI Separata

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.

Page 28: 2 MI Separata

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:

Page 29: 2 MI Separata

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.

Page 30: 2 MI Separata

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

Page 31: 2 MI Separata

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.

Page 32: 2 MI Separata

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.

Page 33: 2 MI Separata

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.

Page 34: 2 MI Separata

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.

Page 35: 2 MI Separata

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>

Page 36: 2 MI Separata

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.

Page 37: 2 MI Separata

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())); }

Page 38: 2 MI Separata

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”.

Page 39: 2 MI Separata

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:

Page 40: 2 MI Separata

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:

Page 41: 2 MI Separata

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.

Page 42: 2 MI Separata

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

Page 43: 2 MI Separata

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();

Page 44: 2 MI Separata

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:'));

Page 45: 2 MI Separata

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.

Page 46: 2 MI Separata

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

Page 47: 2 MI Separata

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.

Page 48: 2 MI Separata

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.

Page 49: 2 MI Separata

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.

Page 50: 2 MI Separata

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");

Page 51: 2 MI Separata

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.

Page 52: 2 MI Separata

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);

}

Page 53: 2 MI Separata

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.

Page 54: 2 MI Separata

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.

Scripts que el

dueño del

Spreadsheet es

propietario.

Scripts

compartidos con

el propietario del

Spreadsheet por

otros.

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.

Scripts que el

Editor de

Spreadsheet es

propietario.

Script compartido

con el editor de

Spreadsheet por

otros.

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.

Solo las scripts del

propietario de la

script

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.

Page 55: 2 MI Separata

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:

Page 56: 2 MI Separata

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

Page 57: 2 MI Separata

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.

Page 58: 2 MI Separata

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"} ];

}

Page 59: 2 MI Separata

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:

Page 60: 2 MI Separata

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.