Primera aplicación con Google Apps Script

0
48755
  1. Automatización con Google Apps Script
  2. Crear un proyecto
  3. Creando el script
  4. Desplegar el script
  5. Conclusiones
  6. Referencias

Automatización con Google Apps Script

Google Apps Script es una plataforma para crear programas basada en la nube que permite de forma sencilla ampliar la funcionalidad de Google Apps y crear aplicaciones ligeras. 

Con Apps Script, puedes hacer cosas interesantes como automatizar tareas repetitivas, crear documentos, enviar correos electrónicos a las personas automáticamente y conectar sus hojas de cálculo a otros servicios. También puedes usar Apps Script para agregar menús, cuadros de diálogo y barras laterales personalizadas a hojas de cálculo de Google. Te permite escribir tus propias funciones para las hojas de cálculo. Además integrar las hojas de cálculo con otros servicios de Google como Calendario, Drive y Gmail etc.

Visión general

Google Apps Script incluye API especiales que te permiten crear, leer y editar hojas de forma programática. Apps Script puede interactuar con Google Sheets de dos formas generales: cualquier script puede crear o modificar una hoja de cálculo si el usuario del script tiene los permisos adecuados para ello, y un script también puede ser incrustado a una hoja de cálculo/documento, lo que le da al script habilidades especiales para modificar la interfaz de usuario o responder cuando se abre la hoja de cálculo.

Apps Script es versátil. Entre otras cosas, te permite:

  • Agregar menús, cuadros de diálogo y barras laterales personalizados a Documentos, Hojas de cálculo y Formularios de Google.
  • Añadir funciones y macros personalizadas para Google Sheets.
  • Publicar aplicaciones web, ya sean independientes o integradas en Google Sites.
  • Interactuar con otros servicios de Google, incluidos AdSense, Analytics, Calendar, Drive, Gmail y Maps.
  • Crear add-ons (complementos) para ampliar Google Docs, Sheets, Slides y Forms, y publicarlos en la tienda de add-ons.
  • Optimizar los flujos de trabajo de Google Chat mediante la creación de un bot de chat.

Crear un proyecto

Para crear un nuevo proyecto hay que ir a script.google.com y pulsar el botón Nuevo proyecto. De este modo creamos el proyecto independiente.

Pero también puedes crear un proyecto incrustado en el documento/la hoja de cálculo etc. Para ello necesitas ir a Herramientas -> Editor de secuencias de comandos. En la parte superior izquierda del editor de secuencias de comandos, haz clic en Proyecto sin título. Hay que introducir un nombre a su proyecto y hacer clic en Cambiar nombre.

El archivo al que se adjunta un script incrustado se denomina «contenedor». Las secuencias de comandos incrustadas generalmente se comportan como secuencias de comandos independientes, excepto que no aparecen en Google Drive, no pueden separarse del archivo al que están vinculadas y obtienen algunos privilegios especiales sobre el archivo principal. Los scripts incrustados en Hojas de cálculo, Documentos, Presentaciones o Formularios también pueden convertirse en aplicaciones web, aunque esto es poco común.

Otra manera posible de crear los proyecto es a través de Google Drive. En la interfaz de Google Drive, pulsa el botón Nuevo -> Más -> Google Apps Script. También puedes crear un proyecto usando la herramienta de línea de comando  clasp que te permite crear, descargar y subir proyectos de Apps Script desde una terminal. Consulta los comandos con la guía de Google para obtener más detalles.

Un proyecto de secuencia de comandos representa una colección de archivos y recursos. Puede tener uno o más archivos de script que pueden ser archivos de código (con extensión .gs) o archivos HTML (extensión .html). También puedes incluir JavaScript y CSS en archivos HTML. El editor de scripts en la nube siempre tiene uno y solo un proyecto abierto en un momento dado. Puedes abrir varios proyectos en varias ventanas o pestañas del navegador.

Manifiesto

La configuración de un proyecto está en el fichero que se llama el manifiesto. Un manifiesto de proyecto de Apps Script es un archivo JSON especial que especifica la información básica del proyecto que Apps Script necesita para ejecutar la secuencia de comandos correctamente. Apps Script crea y actualiza automáticamente el manifiesto del proyecto a medida que crea su proyecto de script y realiza cambios en el editor de Apps Script. En la mayoría de los casos, nunca es necesario ver o editar el manifiesto directamente; sin embargo, en determinadas situaciones puede resultar beneficioso o necesario. Para ver el manifiesto hay que ir a la Configuración del proyecto -> Mostrar el archivo de manifiesto «appsscript.json» en el editor.

//el tipico manifiesto 
{
  "timeZone": "America/New_York",
  "dependencies": {},
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

Creando el script

Vamos a crear un script incrustado para que interactúe con la hoja de cálculo y cree los eventos en el calendario e invite a otros usuarios. Además queremos que mande un correo electrónico con la información del evento para cada uno de los invitados.

Para operar con la hoja de cálculo tenemos que utilizar el servicio Spreadsheet. El servicio Spreadsheet trata a una hoja de cálculo como una cuadrícula, operando con arrays bidimensionales. Para recuperar los datos de hoja de cálculo, debes tener acceso a la hoja de cálculo donde se almacenan los datos (SpreadsheetApp.getActive()), obtener los datos de la pestaña actual (activeSheet.getActiveSheet()) o cualquiera por su nombre (activeSheet.getSheetByName(‘Nombre’)), obtener el rango que contiene los datos (sheet.getDataRange())  y luego obtener los valores de las celdas de este rango (range.getValues()). Apps Script facilita el acceso a los datos leyendo datos y creando objetos JavaScript para ellos.

Primero tenemos que crear una tabla en la hoja de cálculo que contenga los datos necesarios para alimentar nuestro script. La tabla va a tener los siguientes columnas «Eventos» (el nombre de evento), «Fecha de comienzo», «Fecha de fin», «Ubicación», «Emails» (los emails de los invitados), «Enviado» (aquí ponemos «TRUE» en el caso de que el envío haya sido exitoso). Los emails de los invitados ponemos así «abc@gmail.com, bcd@gmail.com» para cada evento. Podemos dejar el campo de «Emails» vacío si no queremos invitar a nadie.

Ahora nos toca crear el script. Tenemos que pulsar «Herramientas» -> «Editor de secuencias de comandos». Al hacerlo aparece la siguiente imagen.

El código

Aquí vamos a escribir nuestro código. Como nuestro proyecto es bastante sencillo vamos a crear todo el código en el mismo fichero. La función onOpen() se ejecuta al abrir nuestra hoja de cálculo. Es una función predeterminada que nos da Google para ejecutar las tareas al abrir nuestro «contenedor». Aquí añadimos el punto de menú «Eventos» para lanzar nuestro script.

**
* la función que se ejecuta al abrir
*/
function onOpen() {
   const menu = [{name: 'Enviar los eventos', functionName: 'sendEvents'}];
   SpreadsheetApp.getActive().addMenu('Eventos', menu);
}

Al pulsar «Enviar los eventos» se ejecuta la función sendEvents() que utiliza la API de Spreadsheet para obtener los valores de nuestra hoja de cálculo. Esta función pasa los valores a otra función que se llama setUpCalendarAndEvents(). El propósito de setUpCalendarAndEvents() es crear los eventos de nuestro Calendario y adjuntar los invitados.

/**
* la función que envía los eventos
*/

function sendEvents() {
   const activeSheet = SpreadsheetApp.getActive();
   const sheet = activeSheet.getSheetByName('Eventos');
   const range = sheet.getDataRange();
   const values = range.getValues();
   setUpCalendarAndEvents_(values, range);
   createEmailAndDoc_(values);
}

Creando eventos

Para poder acceder al Google Calendar tenemos que usar Calendar Service. Dentro de nuestra función setUpCalendarAndEvents() comprobamos si ya existe el calendario «Events». Si no existe lo creamos. Con los valores que nos han pasado creamos los eventos y adjuntamos los invitados a estos eventos.

/**
* crea el calendario y los eventos con los invitados adjuntados
*/

function setUpCalendarAndEvents_(values, range) {
   //check if the calendar "Events" already exists
   let cal = undefined;
   if (CalendarApp.getCalendarsByName('Events').length > 0) {
     cal = CalendarApp.getCalendarsByName('Events')[0];
   } else {
      cal = CalendarApp.createCalendar('Events');
   }
   for (var i = 1; i < values.length; i++) {
     let session = values[i];
     const title = session[0];
     const start = session[1];
     const end = session[2];
     const options = {location: session[3], sendInvites: true};
     const event = cal.createEvent(title, start, end, options).setGuestsCanSeeGuests(false);
     const emails = session[4];
     const userEmailsArray = getUsersEmails(emails);
     session[5] = true;
     for(var index in userEmailsArray){
        event.addGuest(userEmailsArray[index]);
     }
   }
   range.setValues(values);
}

Trabajando con los emails

Para sacar los emails de una cadena (String) que los contiene tenemos que crear otra función que hace uso de la función estándar de JavaScript split() y separa nuestra cadena utilizando el separator «,». Del array que obtenemos, sacamos uno por uno cada email eliminando los espacios al principio y al final de String con la ayuda de la función trim().

/**
* Devuelve un array de emails de un String con emails ("abc@xyc.com,xyz@yax.com,cde@bcd.com")
** */
function getUsersEmails(userEmailsString) {
 let userEmails = []
 if (userEmailsString.length > 0) {
   const emailsArray = userEmailsString.split(',')
   for(var index in emailsArray){
     let email = emailsArray[index].trim();
     userEmails.push(email);
   }
  }
  return userEmails;
}

Al final creamos los documentos en el Drive para luego adjuntarlos a los emails que mandemos.

/**
* busca los emails en la hoja de cálculo y los manda a los invitados
*/
function createEmailAndDoc_(values) {
 for (var i = 1; i < values.length; i++) {
   const eventInfo = values[i];
   // Find users email
   const emails = getUsersEmails(eventInfo[4]);
   for(var index in emails){
     const doc = createDoc(emails[index], eventInfo);
     sendEmails(emails[index], doc)
   }
 }
}

Utilicemos la API de MailApp para mandar los emails con los enlaces de los documentos creados.

/**
* manda los emails
*/
function sendEmails(userEmail, doc) {
   // Email a link to the Doc as well as a PDF copy.
   MailApp.sendEmail({
   to: userEmail,
   subject: doc.getName(),
   body: 'Aquí tienes tus eventos: ' + doc.getUrl(),
   attachments: doc.getAs(MimeType.PDF)
 });
}

Creando un documento de Google

Para crear un documento de Google Document hay que usar la API de DocumentApp. Añadimos también invitado como «editor» de nuestro documento, para que pueda editarlo luego él mismo. Después creamos la tabla con los columnas que tienes los nombres iguales que nuestra hoja de cálculo. Ademas convertimos las fechas a la zona local del usuario con toLocalDataString().

/**
 crea los documentos con la información de un evento
*/
function createDoc(userEmail, response) {
  let doc = DocumentApp.create('Eventos').addEditor(userEmail);
  let body = doc.getBody();
  let table = [['Sessión', 'Comienzo', 'Fin', 'Ubicación']];
  table.push([response[0], response[1].toLocaleDateString(),
  response[2].toLocaleDateString(), response[3]]);
  body.insertParagraph(0, doc.getName())
  .setHeading(DocumentApp.ParagraphHeading.HEADING1);
  table = body.appendTable(table);
  table.getRow(0).editAsText().setBold(true);
  doc.saveAndClose();
  return doc;
}

Ahora vamos a probar nuestro script. Vamos a ir al menú que hemos añadido: «Eventos -> Enviar los eventos».

Aparece el mensaje «Ejecutando secuencia de comandos» y si todo va bien pronto empiezan a llegar los correos a los invitados con la información de los eventos. También podemos comprobar nuestro calendario «Events» si tiene eventos nuevos, creados por nuestro script.

Desplegar el script

La implementación de un proyecto de Apps Script es una versión de la secuencia de comandos que está disponible para su uso como una aplicación web, un add-on o un ejecutable de API. Al crear y administrar implementaciones, puedes iterar su código, realizar un seguimiento de sus cambios y controlar la versión exacta del código a la que tienen acceso sus usuarios. Hay dos tipos de implementaciones: implementaciones principales (head), que siempre están sincronizadas con el código actual y las implementaciones versionadas, que están conectadas a una versión específica del proyecto.

Implementaciones principales (head)

Una implementación principal es el código del proyecto actual. Cuando creas un proyecto de Apps Script, se crea automáticamente una implementación principal para ese proyecto. La implementación head siempre está sincronizada con el código guardado más recientemente. Por ejemplo, si creas una implementación versionada y luego modificas su código, la implementación principal refleja esos cambios, mientras que la implementación versionada permanece intacta. Hay que utilizar las implementaciones principales para probar el código. No utilices implementaciones principales para uso público.

Implementaciones versionadas

En Apps Script, una versión es un snapshot (instantánea) del código. Las versiones se crean automáticamente con cada nueva implementación. Una implementación versionada hace disponible una versión específica del código del proyecto. Esto permite que sus usuarios continúen usando una versión funcional mientras puedes realizar cambios y mejoras en el código. Cuando la aplicación se publique para consumo público, utiliza siempre una implementación versionada. Con el IDE de Google Apps Script solo puedes tener una implementación versionada activa. Pero si usas clasp puedes crear más de una implementación activa. Todas las implementaciones activas estarán disponibles en el IDE en la nube.

Para crear una implementación versionada, sigue estos pasos:

  1. Abre el proyecto de Apps Script.
  2. En la parte superior derecha, haz clic en Implementar -> Nueva implementación.
  3. Junto a «Seleccionar tipo», haz clic en Habilitar configuración de tipos de implementación. Selecciona el tipo de implementación que deseas implementar (aplicación Web, complemento, ejecutable de API, biblioteca).
  4. Introduce la información sobre su implementación y haz un clic en Implementar.

Conclusiones

Con la ayuda de Google Apps Script podemos crear cosas increíblemente complejas que nos pueden ayudar en nuestro día a día. Apps Script utiliza los mismos HTML y JavaScript y por eso prácticamente no existe ningún límite a la hora de crear nuestra solución. Los límites aparecen si queremos escalar nuestra app, para que la usen muchas personas a la vez. El desarrollo en equipo también es complicado, aunque existen soluciones como CLASP. Pero como prueba de concepto o para una app relativamente pequeña que no tendrá muchos usuarios Google App Script te da «por defecto» muchas herramientas que facilitan  el proceso de desarrollo.

Referencias

  1. Google Apps Script Guide
  2. Google Codelabs Apps Script Fundamentals

 

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad