Cómo conectar Google Sheets y Calendar con Apps Script

En este tutorial aprenderemos a conectar Google Sheets con Google Calendar usando Google Apps Script. La idea es que puedas crear eventos en tu calendario directamente desde una hoja de cálculo, automatizando tus citas, reuniones o cualquier evento importante. Esto es súper útil para emprendedores, dueños de pequeñas empresas o cualquier persona que quiera sincronizar su agenda con datos que maneja en Sheets. Además, te mostraré cómo manejar las fechas en JavaScript, una parte clave para que los eventos queden con la hora correcta.

Vamos a empezar desde cero, abriendo el editor de secuencia de comandos en Google Sheets para escribir nuestro script. Lo primero que debes saber es que Google Apps Script te permite conectarte con muchas aplicaciones de Google, no solo Sheets o Gmail, sino también Calendar, Drive, Docs, Forms y más. Para trabajar con Calendar, usaremos la clase CalendarApp, que tiene métodos para crear eventos, obtener calendarios, traer eventos por ID o por fecha, entre otras cosas.

Crear un evento básico en Google Calendar desde Google Sheets

La forma más sencilla de crear un evento es usar el método createEvent de CalendarApp. Este método recibe como argumentos el título del evento, la fecha de inicio y la fecha de fin, que deben ser objetos Date de JavaScript. Por ejemplo, para crear un evento llamado «Nuestro primer evento» el 7 de octubre de 2020 desde las 3:00 p.m. hasta las 5:00 p.m., el código sería así:

function crearEventoBasico() {
  var calendario = CalendarApp.getDefaultCalendar();
  calendario.createEvent('Nuestro primer evento', new Date('October 7, 2020 15:00:00'), new Date('October 7, 2020 17:00:00'));
}

Recuerda que las fechas en JavaScript pueden escribirse de varias formas, pero la más común es usar el formato en inglés con el mes en texto y la hora en formato 24 horas. También puedes usar números para el mes, pero ten en cuenta que en JavaScript los meses empiezan en cero (enero = 0, febrero = 1, …, octubre = 9).

Errores comunes con las fechas y cómo solucionarlos

Un error típico es que el evento aparezca con una hora diferente a la que pusiste. Esto pasa porque Google Calendar maneja la zona horaria UTC y puede que tengas que ajustar la hora restando o sumando una hora para que coincida con tu zona local. Otra cosa importante es que cuando usas números para meses, recuerda que octubre es 9, no 10.

Crear eventos usando variables y datos de Google Sheets

Para hacer esto más dinámico, podemos usar variables para el nombre del evento, la fecha de inicio y la fecha de fin. Además, podemos traer esos datos directamente de una hoja de cálculo. Supongamos que en las celdas A2, B2 y C2 tienes el nombre del evento, la fecha de inicio y la fecha de fin respectivamente. El código que usaría sería algo así:

function crearEventoDesdeSheet() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var nombreEvento = hoja.getRange('A2').getValue();
  var fechaInicio = hoja.getRange('B2').getValue();
  var fechaFin = hoja.getRange('C2').getValue();

  var calendario = CalendarApp.getDefaultCalendar();
  calendario.createEvent(nombreEvento, fechaInicio, fechaFin);
}

En este caso, no necesitamos convertir las fechas porque Google Sheets ya las maneja como objetos de fecha compatibles con JavaScript. Solo recuerda que debes usar getValue() para traer el valor real de la celda y no el rango.

Crear eventos con duración fija sin fecha de fin explícita

A veces no quieres poner la fecha de fin porque la duración siempre es la misma, por ejemplo 30 minutos o 1 hora. En ese caso, solo usas la fecha de inicio y calculas la fecha de fin sumando la duración en milisegundos. Para eso usamos los métodos getTime() y setTime() de los objetos Date en JavaScript.

function crearEventoConDuracion() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var nombreEvento = hoja.getRange('A2').getValue();
  var fechaInicio = hoja.getRange('B2').getValue();
  var duracionMinutos = 30; // Duración en minutos

  var fechaFin = new Date();
  fechaFin.setTime(fechaInicio.getTime() + duracionMinutos * 60 * 1000);

  var calendario = CalendarApp.getDefaultCalendar();
  calendario.createEvent(nombreEvento, fechaInicio, fechaFin);
}

Así, puedes cambiar la variable duracionMinutos para que el evento dure lo que necesites sin tener que poner la fecha de fin en la hoja.

Separar fecha y hora para una mejor experiencia de usuario

En Google Sheets puedes poner la fecha y la hora en celdas separadas para facilitar la selección. Por ejemplo, en B2 la fecha y en C2 la hora (solo la hora, como 14, 15 o 16). Luego en el script combinas ambas para crear la fecha completa con la hora correcta usando setHours(). Un detalle es que puede que debas sumar 1 a la hora para ajustar la zona horaria UTC.

function crearEventoFechaHoraSeparada() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var nombreEvento = hoja.getRange('A2').getValue();
  var fecha = hoja.getRange('B2').getValue();
  var hora = hoja.getRange('C2').getValue();

  fecha.setHours(hora + 1); // Ajuste de zona horaria

  var duracionMinutos = 60;
  var fechaFin = new Date();
  fechaFin.setTime(fecha.getTime() + duracionMinutos * 60 * 1000);

  var calendario = CalendarApp.getDefaultCalendar();
  calendario.createEvent(nombreEvento, fecha, fechaFin);
}

Esto es útil si, por ejemplo, eres profesor y solo das clases a ciertas horas, o tienes un spa con horarios específicos. Puedes validar los datos para que solo se elijan esas horas, y así evitar errores.

Próximos pasos y posibilidades avanzadas

Con esta base ya puedes crear eventos desde Google Sheets a Calendar. Pero lo interesante viene cuando empiezas a traer eventos del calendario a Sheets para ver tu agenda, bloquear horas ya reservadas o automatizar reservas. Por ejemplo, podrías crear un sistema donde al reservar una hora se bloquee automáticamente para que nadie más la escoja. Eso sí es un proyecto avanzado que podemos abordar en otro tutorial.

Si quieres ir más allá y conectar otras aplicaciones o usar la API para funcionalidades más complejas, la documentación de Google Apps Script es tu mejor aliada, aunque está en inglés. Poco a poco iremos viendo más ejemplos y casos prácticos.

Conclusión

En resumen, hoy aprendimos a crear eventos en Google Calendar desde Google Sheets usando Google Apps Script, empezando con el método básico createEvent. Vimos cómo manejar fechas en JavaScript, cómo usar variables y datos desde Sheets, y cómo calcular la duración de eventos sin necesidad de fecha de fin explícita. También aprendimos a separar fecha y hora para mayor flexibilidad en la entrada de datos. Esto te abre un mundo de posibilidades para automatizar tu agenda y gestionar tus citas de forma eficiente.

El siguiente paso recomendado es que experimentes con traer eventos desde Calendar a Sheets, para tener una vista completa y poder gestionar mejor tus horarios. También te recomiendo revisar la documentación oficial de CalendarApp para descubrir todos los métodos disponibles.

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

JuanSGuzman
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.