Eventos recurrentes en Google Calendar para tus horarios de clase con Apps Script y HaC

Hace cosa de dos años publicaba una función personalizada Apps Script para extraer una lista tabular de sesiones de clase a partir de un horario semanal, capaz además de agrupar las sesiones de la misma asignatura impartidas en el mismo horario pero en distintos días de la semana.

Tuit en el que se publicaba la función Apps Script de extracción de eventos a partir de horarios de clase.
Aquí empezó todo...

En aquel momento compartí un repositorio en GitHub con el código de la función y algunas indicaciones de uso, mencionando que aquello no era más que la primera parada en una hoja de ruta que debía conducir a la generación automatizada, o al menos asistida, de eventos en Google Calendar.

Animación que muestra la extracción de eventos a partir de un horario semanal.
Paso 1 de n: Identificar sesiones semanales con la función EXTRAEREVENTOS().

La idea era montar un "tinglado", como a mí me gusta llamar a estas cosas, para facilitar la generación y mantenimiento de calendarios docentes y de ocupación de aulas en el contexto de las actividades de un centro de formación.

El proyecto durmió durante una buena temporada el sueño de los (scripts) justos, hasta que a comienzos de este curso 22/23, ha cristalizado por fin en una herramienta de uso interno que a mi me ahorra (¡y espero que ahorrará en el futuro!) mucho tiempo... lo que cuando superas el medio siglo de vida ya no es cosa menor.

Animación que muestra la generación de eventos en Calendar desde una hoja de cálculo.
Un tinglado (sí, bastante feo) para generar eventos a partir de tablas y más tablas en una hoja de cálculo.

Pero como las fealdades es mejor guardárselas para ahorrarles el trago a los demás, me he pasado unos ratos estupendos durante este primer trimestre escolar, que ya casi nos hemos cargado, montando algo un poco más presentable.

Este artículo y el desarrollo Apps Script que en él presento supone por tanto para mí saldar una deuda (tengo más 😅), contraída conmigo mismo y con la comunidad educativa hace la friolera de dos años.

Con todos ustedes 🎉...

Banner Horarios-a-Calendar
Horarios-a-Calendar (HaC para los amigos).

HaC es una plantilla construida sobre una hoja de cálculo de Google propulsada por Apps Script que espero te resulte más agradable de utilizar que el engendro que puedes ver en la animación de aquí arriba. Y si no, tal vez al menos te sirva como punto de partida o inspiración para generar tu propia solución de automatización, que ya sabemos que los hijos e hijas de uno son siempre los más guapos.

Acompáñame durante el próximo rato si quieres conocer qué puede hacer HaC por ti. 

Y si además eres un poco 🤓, te apetece poner la hoja de cálculo del revés y mirar desafiante a los ojos al script GAS que que le confiere superpoderes, no te pierdas el extenso README.md del repositorio que enlazo al final de este artículo, en él encontrarás balleno 🐋 del bueno, como le gusta decir a mi queridísima compañera en GEG Spain, María Barceló.

👇 DL;NL 👇
En este artículo te explico cómo funciona HaC, una plantilla gratuita de hojas de cálculo de Google + Apps Script que automatiza la creación de eventos periódicos a partir de horarios de clases semanales. Úsala para representar sin esfuerzo en Google Calendar la actividad de los instructores y la ocupación de las aulas de un centro de formación .

TABLA DE CONTENIDOS

Horarios + Calendar = HaC🕺

Un poco (más) de contexto antes de entrar en materia. Tranquilo/a, no voy a extenderme demasiado, que ya bastantes cosas quiero contarte.

Encontrarás una explicación detallada del modo en que preparo los horarios de las clases en mi centro usando hojas de cálculo de Google en este artículo que publiqué en mi otro blog en septiembre del año pasado.

Montando horarios con las hojas de cálculo de GoogleImagen de cabecera motivacional para artículo enlazado.

Sí, soy consciente de que existen estupendas aplicaciones de generación de horarios que, a partir de una información de entrada y de un conjunto de restricciones, exploran miles de posibilidades y generan múltiples alternativas a la velocidad de la luz. Pero por razones que no vienen al caso, yo prefiero hacerme un juanpalomo y prepararlos artesanalmente. Llámame clásico.

Pero volvamos al artículo anterior. Resumiendo bastante, la cosa va de "pintar" las clases semanales de cada grupo usando celdas de colorines en una tabla de modo que mediante una serie de fórmulas se obtengan posteriormente y de manera automática los horarios personales de cada docente y los de uso de las aulas.

Diagrama de la estrategia de preparación de horarios de clase.
De los horarios de grupo a los de docentes y aulas, automáticamente.

El artículo explica de manera muy detallada  el modo en que se ha diseñado la hoja de cálculo y las fórmulas (una por una) que hay en ella, además de otras cuestiones que en absoluto son menores relacionadas con la usabilidad y el control de errores. Pero esto no nos interesa ahora, así que pulsemos la tecla de avance rápido hasta su última sección: balance, limitaciones y siguientes pasos . Anda, pégale una leída rápida y vuelve por aquí, te espero... 

Si ya estás de vuelta habrás visto que en la parte final de esa sección decía esto:

La continuación natural de todo lo que te he contado tiene que ser la generación, a partir de los horarios que ya tenemos en esas familiares y tranquilizadoras estructuras tabulares denominadas tablas, de eventos en calendarios de Google Calendar.

Y aunque en los párrafos finales del artículo de marras ya mostraba en funcionamiento la seminal función EXTRAEREVENTOS(), supongo que en un intento flagrante de elevar la tensión dramática de la narrativa (las vueltas que hay que dar para no escribir cliffhanger),  la cosa se quedó ahí.

Está claro, montamos horarios, extraemos sesiones de clase y queremos trasladarlas automágicamente a Google Calendar en forma de eventos periódicos que se repiten entre las fechas de inicio y fin de la actividad formativa a la que pertenecen. 

Sigo.

Estoy seguro de que la forma en que usamos Calendar en mi centro para gestionar las clases te resultará familiar. Venga, te la resumo ahora mismo en cuatro puntos:

1️⃣ Por una parte creamos una serie de 👥 calendarios docentes en los que se registran exclusivamente los eventos que representan las clases impartidas por cada instructor. Estos calendarios se exponen dentro del dominio de modo que sus eventos sean públicos. Además, ciertos colaboradores, miembros de un grupo del servicio de Grupos de Google, puedan echarme una mano a la hora de gestionarlos. Evidentemente, tanto su visibilidad como permisos de acceso pueden adaptarse a otras necesidades, contextos, etc.

Permisos de acceso y ajustes de compartición de un calendario docente.
Visibilidad de los calendarios docentes.

⚠️ ¡Cuidado! Estos no son los calendarios personales de los docentes, que siguen siendo privados, por supuesto, y pueden contener muchos otros eventos distintos a las clases impartidas, eventos que obviamente no tienen por qué exponerse en ningún momento de manera pública. En mi centro uso un prefijo en el nombre de los calendarios docentes públicos («AG:») para diferenciarlos del resto.

Lista de calendarios docentes públicos. Su nombre comienza por "AG:".
Algunos profes de mi centro, entre los que obviamente me encuentro, en Calendar.

2️⃣ Por otra parte, tiramos de las funciones que ofrece Google Workspace para gestionar recursos de tipo 🏫 espacio de reuniones. Los administradores del dominio pueden utilizar la consola de administración para definirlos en un directorio general (y comprobar cómo se están usando en un panel de mando muy chulo, por cierto).

Cuadro de diálogo de añadir recurso de calendario en la consola de administración de Google Workspace.
Creación de un recurso de tipo espacio de reuniones (para nosotros, ¡un aula!).

Estas salas de reuniones pueden añadirse a la lista general de calendarios desde «Otros calendarios» como un calendario más.

Explorando los recursos del dominio...

Y como calendarios que son, disponen de una dirección de correo electrónico propia, permisos de acceso y uso compartido, además de todo lo esperable, por supuesto.

Ajustes de un recurso de calendario.
Ajustando la configuración de los calendarios de salas (recursos) .

Lo interesante es que, una vez definidos y convenientemente compartidos, los recursos de calendario pueden ser "invitados" a cualquier evento, como una personita más. Y si se trata de espacios de reuniones incluso disponen de una pestaña específica denominada «Salas».

Cuadro de diálogo de creación de un evento, se aprecia que una sala ha sido invitada.
Añadiendo una sala a un evento al crearlo.

☝ Si no estás muy familiarizado con los recursos de calendario deberías dedicar unos minutos a leer cuidadosamente todo lo que cuentan en esta página de la ayuda para el (nunca suficientemente bien apreciado en su justa medida) administrador de Google Workspace.

3️⃣ Para cada sesión de clase generamos un evento en el calendario público 🗓️ del instructor que la imparte, evento al que se añade la sala (aula) en la que tiene lugar. Y para redondearlo todo, invitaremos también al propio docente, de modo que al aceptar la invitación al evento este se quedé incorporado a su calendario personal, juntos a sus eventos privados.

4️⃣ Y voilà, ya solo nos queda incrustar los calendarios de instructores y aulas en nuestra intranet (que está montada con Sites, como tal vez la tuya), para comunicar, de un modo sencillo, esta información a todos los miembros del equipo para los que resulta relevante.

Secciones de uso de las aulas y horarios del personal en una intranet construida con Google Sites.
Secciones de aulas y horarios en la intranet de un centro educativo cualquiera.

Como hemos reservado salas (aulas) al crear los eventos que representan las clases en los calendarios públicos de los instructores, de rebote nos encontramos con que también quedan reflejados automáticamente en los calendarios de cada aula. Por ejemplo, así se ve el calendario que recoge el uso de nuestra aula 14 en la intranet:

La información (oportuna y accesible por las personas adecuadas) es poder.

Hagamos balance.

🎯 Para que nuestros calendarios reflejen las clases del centro hay que:

  1. Identificar las sesiones de clase semanales, agrupando aquellas que tengan lugar a la misma hora pero en distintos días de la semana.
  2. Crear eventos en Calendar en los calendarios docentes para cada una de ellas indicando:
    1. El nombre del evento, que debería establecerse de manera que fuese representativo y guardase cierta homogeneidad en su nomenclatura.
    2. Su hora de inicio y fin.
    3. El día o días de la semana en los que tiene lugar.
    4. El día de inicio y fin de la clase, es decir, de la serie de eventos periódicos.
    5. El aula (espacio) en la que tiene lugar.
    6. El instructor invitados (el propio profe que la imparte).

Fácil y práctico, pero por propia experiencia te digo que también un rollo, especialmente a comienzos de curso, cuando hay que alimentar intensamente a la bestia (Google Calendar) con las clases de todos los grupos que inician. Igual te apetece entregarte a una tarea repetitiva como esta y tal vez incluso entrar un rato en trance 🧘‍♀️ mientras lo haces... pero dudo que carezcas de mejores cosas que hacer con tu tiempo.

A una media de 10 o 15 sesiones semanales  de clase por grupo de formación reglada, ¡y fácilmente pueden ser más!, no tienes más que echar cuentas para apreciar la magnitud del asunto. Y no es solo cuestión de tiempo, porque cuando llevas un rato pinchando y seleccionando opciones de un desplegable aquí y allá es fácil, muy fácil, meter la pata y mandar a la profe de Tecnología al siglo XXII (seguro que ahí está bien) o asignarle la clase de los viernes de Programación de Servicios y Procesos al profe de Escaparatismo.

Pero como seguramente ya sepas, automatizar mandangas como esta es la razón de ser de Apps Script.

Pues esto mismo es HaC.

Usando HaC

Vamos a lo que interesa.

HaC se distribuye como una plantilla de hoja de cálculo de Google. Haz clic en el enlace y obtén una copia.

👉 Horarios-a-Calendar (HaC) 👈

Y luego...

1️⃣Descarga la lista de calendarios públicos de los instructores  y, de manera opcional, agrega sus direcciones de correo electrónico,  si es que vas a enviarles invitaciones a los eventos de clase que generes.👥 Instructores
2️⃣[OPCIONAL] Obtén la lista de salas de tu dominio Google Workspace, si es que usas recursos de calendario y quieres gestionar su reserva con HaC.🏫 Salas
3️⃣Genera nuevos horarios semanales, distribuye tus clases y asigna instructores y salas.⏰ Horarios
4️⃣Introduce el nombre de la hoja de tu horario semanal, revisa las clases detectadas, añade otras manualmente, si lo deseas,y genera eventos periódicos en Google Calendar para ellas entre la fecha de inicio y fin de las clases.➕ Gestión eventos
5️⃣[OPCIONAL] Revisa el histórico de eventos generados en el panel de registro, que dispone de cómodos controles de filtro.📦 Registro eventos

Para desarrollar cada etapa del proceso de generación de eventos para nuestras clases en Google Calendar usaremos el menú del script.

Menú de comandos de HaC.

Hablemos ahora de las etapas de esta secuencia y de las hojas de datos que intervienen en cada una ellas.

Instructores

-| 1️⃣ |-

La gestión de los instructores se realiza en la hoja «👥 Instructores». Dirígete a ella e introduce en la celda «B2» el prefijo que utilizas en los nombres de tus calendarios para diferenciar los calendarios públicos de los instructores (hasta 6 caracteres).

Celda B2 con el prefijo "AG:".

-| 2️⃣ |-

Haz clic en el comando «👥 Buscar calendarios instructores» en el menú de HaC.

Menú de HaC con la opción de buscar calendarios de instructores destacada.

HaC siempre te pedirá confirmación antes de realizar cualquier proceso delicado.

Cuadro de diálogo de confirmación previo a la búsqueda de calendarios docentes.

Una vez hagas clic en «Aceptar», HaC buscará todos los calendarios a los que tengas acceso en Google Calendar cuyos nombres incluyan el prefijo especificado y descargará el nombre e ID (una dirección de correo electrónico raruna) de cada uno de ellos en las columnas «F» y «G».

Estas columnas quedan normalmente ocultas en un grupo de columnas escamoteable para evitar ediciones accidentales. Si te quedas más tranquilo, despliégalas momentáneamente para asegurarte de que realmente se han obtenido calendarios tras utilizar el comando anterior del menú de HaC.

Columnas F y G de la tabla de calendarios docentes con información obtenida de Calendar: nombre e ID de calendario.
Columnas ocultas en la tabla de datos de instructores.

-| 3️⃣ |-

Ahora debes:

Tabla de instructores con números (1 a 3) que señalizan las columnas en las que debe introducirse información.
Introduciendo la información del equipo docente en HaC.

1️⃣ Introducir manualmente las iniciales (longitud máxima de 6 caracteres) que vas a utilizar para identificar a cada docente en HaC en la columna «Iniciales». Estas iniciales las usarás más adelante cuando construyas los horarios semanales de cada uno de tus grupos.

2️⃣ Seleccionar en la columna «Calendario» el calendario docente público utilizado para las clases de cada instructor. En el desplegable aparecerán los nombres de los calendarios de instructores que has obtenido hace un momento. Verás que en la columna «ID calendario» se mostrará automáticamente la dirección de correo electrónico del calendario seleccionado.

3️⃣ Si además pretendes enviar invitaciones a sus propios eventos de clase a tus profes, deberás introducir sus direcciones de correo electrónico en la columna «Correo electrónico». Esto es opcional, naturalmente. HaC no se detendrá con error en ningún caso al generar los eventos en Calendar si le pides que invite a los instructores pero falta alguna de sus direcciones de correo (este comportamiento puede modificarse fácilmente, pero tendrás que leer la documentación técnica del script para averiguar cómo).

☝ HaC usa indicadores visuales para llamar tu atención sobre posibles problemas detectados o que podrían producirse. En esta hoja, por ejemplo, para señalizar que falta información sobre los instructores o se han introducido datos duplicados.

En general, el color naranja 🟧 se utilizará para advertirte de problemas leves, en tanto que el rojo 🟥 se reserva para los más críticos. Consulta las claves informativas que encontrarás en las celdas coloreadas de amarillo 🟨 para averiguar su significado específico en cada hoja (basta con que pases la rata por encima). En ellas también hay indicaciones, advertencias y consejos de uso que te resultarán de utilidad a la hora de utilizar HaC.

Animación que muestra las distintas notas contextuales en la hoja de gestión de instructores.
Festival de notas y colorines, probablemente excesivo, por una buena causa:  mantenerte informado.

Salas (aulas)

Si en tu dominio dispones de recursos de calendario de tipo sala, no tienes más que hacer clic en «🏫 Buscar salas» para que su información básica, así como nuevamente los identificadores de sus calendarios, aparezcan en esta tabla y HaC pueda utilizarlos para realizar las reservas correspondientes.

Menú de HaC con la opción de buscar salas destacada.

La información de las salas aparecerá, como cabe esperar, en la hoja «🏫 Salas».

No lo he mencionado cuando hablábamos hace un momento de los calendarios de instructores, así que lo hago ahora. HaC emitirá mensajes de estado como este para informarte de qué está haciendo en cada momento...

... y además escribirá en la parte superior de la tabla la fecha y hora de la última ejecución de cualquiera de los procesos de obtención de calendarios que se haya completado con éxito.

Celda que muestra la fecha en la que se realizó la última obtención de calendarios de salas del dominio.

Podrás usar más tarde los nombres de las salas, que aparecen en la columna «Nombre», para establecer en qué aula se impartirán cada una de tus clases cuando confecciones los horarios semanales.

Tabla de salas con datos de muestra.
Recursos de calendario de tipo sala del dominio.

Al igual que el envío de invitaciones a instructores, la reserva de salas es una característica que puedes utilizar o no. Si no es el caso, simplemente ignora todo lo dicho en este apartado y pasa raudo y decidido al siguientes.

Horarios semanales

Vamos ahora a generar los horarios semanales de cada grupo.

Para ello, HaC cuenta con un comando que realizará una copia de la hoja «⏰ Plantilla horario», que por defecto permanece oculta.

Menú de HaC con la opción de crear un nuevo horario semanal destacada.

Sí, ya sé que duplicar una hoja resulta trivial , pero no me costaba nada incluir un comando específico para ello, de este modo mantenemos la plantilla fuera de la vista, evitando así que ocupe un espacio a menudo escaso en la barra inferior del editor de hojas de cálculo.

Cuadro de diálogo de petición del código del nuevo horario.

A continuación, HaC te preguntará insistentemente el código del horario, que se utilizará para asignarle un nombre a la hoja de trabajo que lo contendrá, hasta que se dé una de estas dos situaciones:

  • Introduzcas un código de un máximo de 8 caracteres que no se corresponda con el nombre de una hoja que ya existe y hagas clic en «Aceptar».
  • Pulses el botón «Cancelar».
Mensaje de confirmación de creación de una nueva hoja de horario semanal.

Encontrarás el horario generado en el extremo izquierdo de la barra inferior de pestañas todas las hojas de trabajo existentes en tu hoja de cálculo.

Plantilla de horario semanal con 13 elementos relevantes señalizados mediante círculos numerados.
Es probable que pases unos buenos ratos montando heroicamente tus horarios en hojas como esta.

La hoja de horario semanal está dividida en dos secciones. Utilizarás la parte superior (elementos 1 - 8 en la imagen anterior) para establecer el horario semanal de clases. En la parte inferior (elementos 9 - 13) aparecerán automáticamente las sesiones de clase extraídas del horario, que deberás completar indicando instructor y sala.

Programación de las sesiones de clase

Veamos qué representan cada uno de esos círculos numerados que aparecen en la captura anterior (tenla a mano mientras lees lo que sigue).

0️⃣1️⃣ [OPCIONAL] Introduce aquí el nombre (legible) que utilizas para identificar el grupo o la especialidad formativa cuyo horario estás construyendo. También puedes omitirlo, aunque HaC mantendrá entonces encendida, como un árbol de Navidad, una alerta de color ámbar para manifestar su inquietud. En cualquier caso, esta información es totalmente opcional y no se utilizará posteriormente para generar los horarios en Google Calendar, pasa de ella si quieres.

0️⃣ 2️⃣ Escoge horario de mañanas o de tardes. Este control actúa sobre los valores de hora que se muestran en las columnas «A» e «I». Estos valores representan la hora de inicio y fin de cada franja horaria.

0️⃣ 3️⃣ Selecciona la duración de cada franja horaria. Si ninguna de las opciones disponibles te cuadra, no tienes más que seleccionar el ajuste «Manual». En ese caso aparecerá un icono con forma de mano abierta 🖐 junto a los rótulos «Inicio» y «Fin» que se encuentran en la parte superior, a ambos lados del horario, para indicar que ahora debes introducir tú mismo la hora precisa de comienzo y fin de cada franja horaria. Esto resulta más tedioso, que duda cabe, pero permite combinar franjas horarias semanales de diferente duración.

V
¿Una mano ahí? Eso indica que has decidido definir las franjas horarias manualmente.

Si intentas modificar directamente las horas de inicio o fin de cada franja horaria sin haber seleccionado previamente el ajuste manual de su duración se producirá un error que hará desaparecer todos los valores de hora dela tabla (feo). HaC hará te mostrará además este icono ⛔ en la parte superior de la tabla para que recapacites, simplemente elimina la información introducida y a correr.

0️⃣ 4️⃣ Este campo aparecerá prerrellenado con el código que le has facilitado a HaC al generar una copia de la plantilla del horario. Puedes editarlo posteriormente.

0️⃣ 5️⃣ Aquí debes introducir las fechas de inicio y fin de las clases del grupo. No es necesario que te asegures de que ambos coincidan con algún día de la semana en el que efectivamente se haya definido una sesión de clase en el horario. HaC realizará internamente los ajustes necesarios para que todo cuadre a la hora de generar los eventos en Calendar. Yo suelo introducir en estos campos las fechas oficiales de inicio y fin del curso escolar, sin preocuparme de en qué días de la semana caen.

0️⃣6️⃣  Utiliza estas casillas para definir la hora de inicio de la clases matutinas 🌞 y vespertinas 🌑.  Por defecto la plantilla de clases incluye 14 franjas horarias con una duración predeterminada de 30 minutos. Esto permite cubrir unos horarios típicos de 8:00 a 15:00 y 15:00 a 22:00, pero si necesitas un número mayor de franjas horarias, tal vez porque tus horarios deben ser más granulares, no tienes más que insertar filas, pero asegúrate de hacerlo siempre por debajo de la 9 y por encima de la 22 ⚠️.

0️⃣7️⃣ En la tabla - horario es donde se establecerán las clases de la semana. Introduce la etiqueta identificativa de la materia, asignatura o módulo profesional que se imparte en cada una de las franjas horarias diarias disponibles (yo las llamo clases, sin más). Si en una de ellas no hay ninguna clase, simplemente déjala en blanco.

Para ello, HaC necesita que escribas un código compuesto por entre 2 y 8 letras o números. Al hacerlo, el color de fondo de la celda cambiará automáticamente. No obstante, seguramente querrás aplicar colores de manera homogénea para diferenciar las clases de cada módulo profesional o asignatura, algo que tendrás que hacer del modo convencional utilizando la herramienta de color de relleno de celdas.

🚨 Nunca combines las celdas de la tabla, todas las franjas horarias deben conservar su atomicidad (copia y pega, que tampoco cuesta tanto). Asegúrate además de introducir el código de la materia correspondiente en todas y cada una de las celdas correspondientes a las sesiones de clase semanales en las que se imparte. ¡Una celda en blanco es un tiempo sin clase!

0️⃣8️⃣ Si andas justo de espacio vertical en pantalla, usa este botón para plegar (y desplegar) la tabla horaria y concentrarte así en la información que se muestra en la parte inferior de la plantilla. Ahora vamos con ella.

☝ Con HaC he intentado sistematizar y empaquetar de un modo genérico y aislado de otras herramientas el proceso de generación de horarios, pero como es lógico, tanto la plantilla de hoja de cálculo como el código Apps Script que la propulsa probablemente precisen de ciertas adaptaciones para encajar en tus flujos de trabajo.

En mi caso, el diseño horario de las especialidades que se imparten en el centro ya suele haber quedado definido previamente en otra herramienta. Posiblemente también sea el tuyo, así que tira de lo que puedas (por ejemplo, IMPORTRANGE) para traerte esa información a HaC automáticamente.

Asignación de docentes y espacios en la lista agrupada de sesiones

Vamos ahora con la sección inferior, que resume las sesiones de clase semanales.

0️⃣9️⃣ Aquí verás tanto el cómputo semanal de horas de clase (solo si no se han definido franjas horarias de manera manual) como el número de clases que HaC ha extraído a partir de la tabla superior, de la que hemos hablado hace un momento. Estas sesiones se establecen agrupando todas las franjas horarias contiguas pertenecientes a un mismo día de la semana en las que se imparte la misma materia.

1️⃣0️⃣ Por defecto, HaC tratará de agrupar las sesiones de clase de la misma materia que tienen lugar en el mismo horario pero en distintos días de la semana. Si por alguna razón prefieres que esto no sea así solo tienes que desactivar esta casilla de verificación.

1️⃣1️⃣ En esta tabla HaC enumerará las sesiones de clase que ha encontrado en tu horario. El proceso es totalmente automático, solo tienes que ir colocando tus clases en las distintas franjas horarias semanales para que vayan apareciendo aquí en tiempo real.

Animación que muestra la aparición de las sesiones de clase a medida que se construye el horario semanal.
La función personaliza Apps Script EXTRAEREVENTOS(), incluida en la plantilla, es la responsable de esto.

1️⃣2️⃣ La columna «Instructor» de la tabla se utiliza para seleccionar el profe de cada sesión. La lista de instructores disponibles se toma de la hoja «👥 Instructores».

1️⃣3️⃣ Ya por último, solo te quedará por indicar en la columna «Sala» el aula en la que se desarrollará la sesión de clase. La reserva de espacios es una característica opcional en HaC. Es más, ni siquiera cuando elijas hacerlo es técnicamente imprescindible a la hora de llevar a cabo la generación de eventos en Google Calendar. Si el aula no se ha especificado, HaC tratará de generar el evento sin rechistar, aunque señalizará que le falta esa información para poder completar el proceso de manera plenamente satisfactoria en la hoja de gestión de eventos, que veremos a continuación.

☝ HaC no ha sido diseñado para introducir información directamente en esta lista en la que se resumen y agrupan automáticamente las sesiones de clase definidas en el horario semanal superior (aunque si te pones un poco burro puedes lograrlo, claro está).

Ya tenemos todo en su sitio. Solo nos falta empujar delicadamente toda esta información hacia los calendarios docentes y de uso de las aulas en Google Calendar.

Gestión  de eventos en Google Calendar

La hoja de gestión de eventos

Veamos por fin qué se cuece en la hoja «➕ Gestión eventos».

Hoja de generación de eventos con 9 elementos relevantes señalizados mediante círculos numerados.
Esta pestaña constituye el centro de control desde el que vamos a generar eventos en Calendar para las clases

1️⃣ HaC es capaz de gestionar múltiples hojas de horarios semanales. Para indicarle con cuál deseamos trabajar en cada momento introduce el nombre de la hoja seleccionada en la celda «C3».

La hoja indicada debe existir. Además, HaC realizará algunas comprobaciones para tratar de determinar si realmente contiene un horario antes de darla por buena (si te intriga cómo se puede hacer esto sin scripts ni historias, consulta la documentación técnica de HaC).

Mensaje de error al introducir el nombre de una hoja que no existe o no contiene un horario semanal.
No abuses de HaC, no es infalible.

2️⃣ Si todo va como debe, las fechas generales de inicio y fin de las clases del horario que se encuentra en la hoja cuyo nombre acabas de introducir aparecerán en las celdas «E3» y «F3». Esto es puramente informativo, en ningún caso deberás escribir directamente en ellas.

3️⃣ En la tabla aparecerá a continuación toda la información de las sesiones de clase tomadas del horario escogido, información que HaC utilizará posteriormente para generar los eventos correspondientes en Google Calendar.

4️⃣ Fíjate en cómo las fechas efectivas de inicio y fin de cada sesión de clase (columnas «Inicio rep.» y «Fin rep.») se calculan automáticamente, ajustándolas respectivamente al primer día de la semana en que tiene lugar dicha sesión tras el inicio del periodo lectivo general y al último antes de que este haya concluido.

Detalle de las fechas de inicio y fina generales y de las específicas de cada sesión de clase.
Aquí se ajustan las fechas de inicio y fin de repetición para cada sesión de clase semanal.

5️⃣ Puedes seleccionar las sesiones de clase para las que deseas generar (o eliminar) eventos en Calendar utilizando las casillas de verificación de la columna «A». El botón 🔘 en la parte superior establecerá el estado de todas ellas de manera conjunta de modo que cambie el estado del mayor número posible (la idea es ahorrarte clics).

Animación que demuestra el funcionamiento del botón de conmutación general de las casillas de verificación de selección de sesiones de clase.
Un botón de conmutación general (más o menos) inteligente.

☝ HaC ignorará siempre (también al utilizar el botón de selección general) todas aquellas filas de la tabla en las que las columnas «Grupo» y «Clase» están en blanco, con independencia de su estado de selección.

6️⃣ [OPCIONAL] En la columna «Descripción» puedes anotar información adicional, que se añadirá a los detalles de los eventos generados.

Captura de la sección que contiene la descripción de un evento en Calendar.
Información de contexto en la descripción de un evento.

💡 La secuencia de texto utilizada en la descripción admite marcado HTML.

7️⃣ Las columnas «Fecha proceso» y «Resultado» serán rellenadas por HaC cuando se generen (o eliminen) eventos. Aquí aparecerá la fecha y hora de la última operación realizada sobre cada sesión de clase / evento, así como los posibles errores producidos o un mensaje de éxito, en su caso.

Ejemplo de información facilitada en un proceso de generación de eventos.
¡Houston, tenemos un problema con la sala del tercer evento!

8️⃣ Utiliza estos ajustes para configurar ciertos aspectos del funcionamiento de HaC:

Invitar a instructores

HaC trataré de enviar invitaciones a los instructores para que puedan añadir los eventos de las clases que imparten a sus calendarios personales fácilmente.

Si se ha seleccionado esta opción pero el correo electrónico personal del instructor no se encuentra en la hoja 👥 Instructores el evento será generado en Calendar de todos modos.

Reservar espaciosHaC realizará la reserva del espacio (aula) en el que tiene lugar cada sesión de clase. Los eventos a los que no se les haya asignado un espacio se generarán igualmente.
Deseleccionar clases tras procesarlas con éxitoSe desactivará la marca de selección tras generar o eliminar el evento asociado a una sesión de clase con éxito.
Borrar fecha y resultado del proceso previoAntes de comenzar a procesar un conjunto de sesiones de clase se borrará totalmente el contenido de las columnas «Fecha proceso» y «Resultado». También hay un comando en el menú de HaC, bastante innecesario, por cierto 😆, para hacerlo manualmente.

9️⃣ Este botón despliega tres columnas ocultas que son necesarias para generar correctamente los eventos asociados a tus clases en Calendar. Si quieres te contaré más cosas sobre ellas en la documentación técnica de HaC, pero por ahora puedes olvidarte de ellas, no las necesitamos para nada. ¡Mejor déjalas bien escondidas!

Comprobarás que la hoja de gestión de eventos de HaC contiene numerosas notas con información contextual importante para que puedas utilizar la plantilla de manera efectiva y sin errores.

Animación que muestra las instrucciones de uso contextuales en algunas de las múltiples notas de la hoja de gestión de eventos.
¡La animación muestra una versión preliminar de HaC, algunas notas no dicen exactamente lo mismo que en la versión final!

De algunas cosas que encontrarás en esas notas ya hemos hablado, pero hay algo importante que aún tenemos que comentar.

Y es que aunque el flujo de trabajo que te recomiendo que sigas en HaC es el descrito hasta el momento, la plantilla es lo suficientemente flexible como para admitir la introducción manual de sesiones de clase:

  • De manera adicional a las que se toman de una hoja de horario semanal.
  • En lugar de las sesiones de cualquiera de tus hojas de horario.

¿Y esto para qué sirve? Pues no estoy muy seguro, la verdad, pero mi más que evidente TOC me impedía lanzar HaC sin implementar esta posibilidad 😜.

Introducción manual de clases

Si lo deseas, puedes añadir más sesiones de clase a la tabla añadiéndolas justo debajo de la última importada de una hoja de horario semanal. Para ello, tendrás que introducir la siguiente información adicional en ciertas columnas de la tabla:

ClaseIdentificador descriptivo de la clase (entre 2 y 8 caracteres).
DíasDías de la semana en que tiene lugar, usando las iniciales típicas (L, M, X, J, V, S, D) separadas por comas.
Hora inicioHoras de inicio de la sesión, en formato HH:MM.
Hora finHoras de fin de la sesión, en formato HH:MM.
InstructorIniciales del instructor (haz doble clic para que aparezca la lista de instructores), tal y como aparece en la hoja «👥 Instructores».
AulaNombre del aula, correspondiente a alguna  (lo mismo, doble clic para que se despliegue la lista de espacios disponibles).
DescripciónInformación de contexto opcional.

Todas las sesiones que añadas comparten necesariamente con las ya existentes los valores generales establecidos para el horario del grupo que puedes apreciar en la parte superior de la tabla:

  • Código del grupo (horario)
  • Fecha de inicio
  • Fecha de fin

En cuanto introduzcas el identificador de una nueva clase verás que el resto de celdas de esa fila se activan para indicarte que HaC está esperando más información necesaria para caracterizar la sesión.

Secuencia de introducción de una sesión de clase adicional de manera manual.
Recuerda el código de colores, naranja problema leve, rojo problema grave. El porqué en las notas contextuales.

La celda correspondiente a la columna «Grupo» se rellenará automáticamente, del mismo modo que las que se encuentran en las columnas «Inicio rep.» y «Fin rep.», en el caso de estas últimas una vez que hayas especificado los días de la semana.

☝ En este modo de funcionamiento, digamos que semimanual, verás que aparece el símbolo ✖️ junto a las etiquetas de encabezado de las columnas mencionadas para recordarte que no debes introducir información en ellas de manera manual, puesto que su contenido está directamente controlado por HaC.

⛔ ¿Recuerdas este icono?  Aquí también aparecerá, ahora en el extremo superior izquierdo de la tabla de sesiones de clase, para señalizar una situación de error cuando introduzcas información en celdas donde no debes meter mano. Cuando eso ocurra, simplemente borra el valor que has introducido para que toda vuelva a la normalidad y sigue con tu vida.

También puedes prescindir totalmente de programar tus clases en las hojas de horarios semanales. En ese caso no debes indicar ninguna hoja de horario en la celda «C3»  e introducir a continuación la información relativa a todas las sesiones de clase directamente en la tabla.

Si optas por esta posibilidad comprobarás que el símbolo 🖐 aparecerá en la parte superior de la tabla de sesiones de clase para hacerte saber que has activado el modo de introducción de datos totalmente manual™. Además, sendas ✖️ se mostrarán en las celdas «E3» y «F3», en tanto que las que se veían hasta el momento en otras columnas habrán desparecido.

Hoja de gestión de sesiones en modo totalmente manual. Ahora aparece el símbolo ✖️ en las celdas que correspondientes a las fechas generales de inicio y fin de las clases y desaparece de grupo, inicio y fin de repetición.
Los emojis nunca se equivocan: este es el modo totalmente manual.

Por si no había quedado claro, esto quiero decir que ahora vas a tener que currar un poquito más para definir tus sesiones de clase. Además de toda la información necesaria para definir una sesión en el modo semimanual que acabamos de ver hace un momento, ahora deberás introducir también el código del grupo y las fechas de inicio y fin de repetición.

GrupoCódigo del grupo (hasta 8 caracteres).
Inicio rep.Fecha exacta en la que se producirá la primera repetición de la sesión de clase. Debe coincidir ⚠️ con alguno de los días de la semana en los que tiene lugar la sesión, de lo contrario se generará un primer evento "fantasma" en la serie recurrente en Calendar. 
Fin rep.Fecha en la que se producirá la primera repetición de la sesión de clase (sin mayores precauciones).

Una vez más, te recomiendo encarecidamente que revises las notas de uso que encontrarás en algunas celdas 🟨, al menos las primeras veces que utilices HaC.

Además, HaC usa con intensidad las reglas de validación de datos (acompañadas de los  mensajes de error correspondientes)  y el formato condicional para explicarte de qué manera espera que introduzcas la información que necesita. 

Generación y actualización de eventos

Una vez te hayas asegurado de que tus sesiones de clase son correctas, solo tienes que seleccionar todas aquellas para las que deseas generar eventos en Google Calendar y usar el comando ➕ Generar/actualizar clases en Calendar del menú de HaC.

Menú de HaC con la opción de generar eventos destacada.

HaC te pedirá confirmación para tirar con adelante (como siempre).

Cuadro de diálogo de confirmación previo a la generación de eventos.

A medida que el transcurso del proceso se vayan generando eventos, podrás ver como la fecha y el resultado de cada operación van a ir apareciendo en las columnas «Fecha proceso» y «Resultado» de la tabla de sesiones. Esto no en absoluto óptimo desde un punto de vista técnico, pero sí bastante entretenido y en cualquier caso  tolerable, en mi opinión, teniendo en cuenta las características de esta automatización.

Al finalizar, se mostrará un cuadro de diálogo con un resumen del número de eventos generados y omitidos (tal vez a causa de algún error o información incompleta).

Cuadro de diálogo con información de resumen del proceso de generación de eventos.

Dicho esto, pongo ahora encima de la mesa dos circunstancias relevantes de las que me gustaría hablarte antes de concluir esta sección.

En primer lugar, HaC dará nombre a los eventos en Google Calendar combinando del siguiente modo el contenido de las celdas que contienen el nombre del grupo, de la clase y las iniciales del instructor:

«GRUPO» «CLASE» («INSTRUCTOR»)
Evento generado por HaC, tal y como aparece en Calendar.

De este modo se presentará de manera compacta la información más importante relativa a cada sesión de clase, tanto en los calendarios docentes como en los que recogen la ocupación de las aulas.

  • Grupo
  • Materia / asignatura / módulo
  • Docente
  • Espacio

En segundo lugar, es posible que tras generar los eventos de un conjunto de sesiones de clase te veas en la necesidad de hacer cambios en el horario semanal. Bien, pues no es necesario que elimines los eventos en Google Calendar de manera manual antes de generar otros nuevos para tus clases actualizadas.

HaC recuerda todos los eventos que se generan y tratará de impedir que se produzcan duplicados, lo que sería un auténtico lío y además podría ocasionar cierto caos cuando se reservan espacios.

 ☝Para determinar si un evento ya ha sido generado y debe actualizarse HaC se fija en la información contenida en las columnas «GRUPO» y «CLASE». 

Si cualquier evento previamente generado presenta coincidencia en ambos campos con cualquier sesión de clase que vaya a generarse, HaC entenderá que realmente pertenecen al mismo horario semanal y lo eliminará antes de proceder a la generación de nuevos eventos.

Mensaje de estado indicando que se están eliminado eventos previos.

Esta estrategia (un poco bruta, es verdad) garantiza que se puedan modificar horas, días, instructores y espacios sin que se produzcan colisiones a la hora de generar los eventos en Google Calendar. Esto resultaría especialmente crítico en el caso de las reservas de espacios, dado que en esos casos la sala rechazaría el evento y sería necesario solucionar el conflicto y volver a a realizar la reserva.

Para lograrlo, primeramente se eliminarán siempre todos los eventos previos coincidentes con los que hay en la tabla y solo después se procede a la generación de los nuevos.

🚨 Cosas a evitar puesto que confundirían a HaC:

  • Modificar la denominación del grupo o de las clases.
  • Usar una misma plantilla de HaC para gestionar los horarios correspondientes a varios cursos lectivos distintos del mismo grupo.

Eliminación de eventos

Sabiendo todo lo que ya sabemos, esto no tiene demasiado misterio.

Menú de HaC con la opción de eliminar eventos destacada.

Al igual que cuando se generan eventos, aquí también se irá actualizando la tabla con la fecha y el resultado de cada operación, a medida que se produce.

Ejemplo de información facilitada en un proceso de eliminación de eventos.
Los números entre corchetes indican el nº real de eventos de Calendar que han sido eliminados al procesar esa sesión.

Del mismo modo, se mostrará un informe final con el número de eventos eliminados y aquellos de los que, bien no hay rastro en la tabla 📦 Registro eventos, bien sí se han encontrado en ella pero, por alguna razón, carecían de un evento real en Google Calendar que eliminar (tal vez porque ya los has eliminado tú).

Cuadro de diálogo con información de resumen del proceso de eliminación de eventos.

El recuento de eventos en este mensaje informativo indica el nº de sesiones de clase en las que realmente se han eliminado uno o más eventos. Dado que se buscan coincidencias de «GRUPO» y «CLASE», es posible que al realizar la eliminación de una sesión de clase determinada se pueden eliminar también, en ese paso, otras sesiones semanales de la misma clase.

☝ Para que todo fluya, deja que sea HaC exclusivamente quien se encargue  de generar o eliminar los eventos de tus clases Google Calendar. Tampoco le toques un pelo a la información contenida en la tabla de registro de eventos, o todo puede irse (un poquito) al garete.

Registro de eventos

 

Comentarios finales y detalles técnicos

 

 

 

 

 

Comentarios