ICS o CSV para datos de calendario: cuál usar
Comparación propiedad a propiedad entre iCalendar y CSV: qué sobrevive de las reglas de recurrencia, zonas horarias, alarmas y UID en cada formato, cuándo conviene la hoja de cálculo y cómo hacer la ida y vuelta para editar eventos en masa.
Usa ICS siempre que el destino sea una aplicación de calendario, y CSV siempre que el destino sea una hoja de cálculo, un informe o una canalización de datos. La diferencia no es cuestión de gustos: ICS es un formato estructurado con una especificación detrás (la RFC 5545) que transporta reglas de recurrencia, definiciones de zona horaria, alarmas e identificadores estables, mientras que CSV es una rejilla plana de cadenas de texto sin noción de nada de eso. Todo lo que ICS sabe y CSV no se pierde en cuanto conviertes en esa dirección, y eso está bien siempre que sepas exactamente qué has dejado por el camino.
Qué guarda realmente cada formato
Un archivo ICS es un conjunto de componentes. Cada VEVENT contiene propiedades, y varias de ellas no tienen equivalente razonable en una columna.
- RRULE, la regla de recurrencia. RRULE:FREQ=WEEKLY;BYDAY=TU,TH;UNTIL=20261231T235959Z es una sola línea que genera más de cien apariciones. Sus acompañantes EXDATE (fechas excluidas de la serie) y RDATE (fechas añadidas) funcionan igual.
- TZID y VTIMEZONE: la referencia de zona horaria por evento más el bloque que define los desfases estándar y de verano de esa zona y sus reglas de cambio.
- VALARM: un componente anidado por recordatorio, con TRIGGER (por ejemplo -PT15M, quince minutos antes del inicio), ACTION (DISPLAY, AUDIO, EMAIL) y su propia descripción. Un evento puede llevar varios.
- UID y SEQUENCE: el identificador que permite actualizar un evento en vez de recrearlo, y el contador de revisión que le indica al importador qué copia es más reciente.
- ATTENDEE y ORGANIZER: participantes con su rol, su estado de respuesta (PARTSTAT) y su dirección de correo, una propiedad por persona.
- STATUS, TRANSP y CLASS: confirmado, provisional o cancelado; ocupado o libre; público o privado.
Un archivo CSV son filas y columnas: una línea de cabecera con los nombres de campo y una línea por evento. Nada más. Todos los valores son texto, no hay anidamiento y cualquier propiedad repetible —varios asistentes, varias alarmas— hay que meterla a presión en una celda o descartarla.
Cuándo conviene CSV
CSV gana siempre que quieras mirar tus eventos como datos y no como una agenda.
Análisis en Excel o Google Sheets
¿Cuántas horas se fueron en reuniones internas el trimestre pasado? ¿Qué cliente consumió más tiempo? Una tabla dinámica sobre un CSV lo responde en un minuto, y sobre un archivo ICS no lo responde en absoluto. Con los eventos en columnas, SUMAR.SI.CONJUNTO, CONTAR.SI.CONJUNTO y los filtros funcionan como siempre.
Informes y facturación
Los partes de horas, los informes de proyecto y las facturas necesitan la duración por evento agrupada por cliente o etiqueta. Exportas a CSV, añades una columna calculada de duración a partir del inicio y el fin, agrupas y listo. Entregar un .ics a quien esperaba una tabla no ayuda a nadie.
Limpieza masiva de datos
Renombrar 200 eventos de "Sync" a "Reunión semanal", quitar un prefijo, corregir la dirección de una oficina antigua, uniformar mayúsculas: todo es inmediato con buscar y reemplazar o una fórmula en la hoja, y desesperantemente lento evento por evento en la interfaz del calendario.
Alimentar una herramienta de BI o una base de datos
Power BI, Looker Studio, Tableau y prácticamente cualquier vía de importación de base de datos aceptan CSV. Casi ninguna acepta ICS. Si los datos de calendario tienen que cruzarse con otros datos de negocio, CSV es el formato de tránsito. (Si el destino es código y no una tabla, ICS a JSON conserva más estructura y suele ser mejor objetivo.)
Cuándo ICS no es opcional
- Importar en una aplicación de calendario. Google Calendar, Outlook, Apple Calendar y Thunderbird importan ICS. Algunas admiten CSV con menos campos y sin recurrencia: la importación CSV de Google Calendar, por ejemplo, ignora la recurrencia por completo y crea eventos sueltos.
- Suscripciones a calendarios. Un feed en una URL que el cliente descarga periódicamente es un archivo ICS por definición. No hay equivalente en CSV: todo el mecanismo depende de UID estables para que el cliente distinga una actualización de un evento nuevo.
- Convocatorias de reunión. Una invitación es un objeto ICS con METHOD:REQUEST, un ORGANIZER, propiedades ATTENDEE y gestión de respuestas. Las confirmaciones y rechazos son ICS con METHOD:REPLY.
- Cualquier cosa con recurrencia, recordatorios o asistentes. Si eso importa, tiene que ir en ICS, porque en un CSV no hay dónde ponerlo sin inventar una convención que ningún importador conoce.
- Mover un calendario entre proveedores. Exportas ICS e importas ICS. Pasar por CSV a mitad de camino elimina en silencio la recurrencia y las alarmas.
Qué se pierde exactamente al convertir de ICS a CSV
La conversión conserva los campos planos: SUMMARY, DTSTART, DTEND, LOCATION, DESCRIPTION y normalmente UID y STATUS como columnas adicionales. Lo que no sobrevive como estructura:
- La recurrencia. Una serie semanal acaba siendo una sola fila (el evento maestro, con el texto de la RRULE inerte en una celda) o una fila por aparición expandida. Ambas son incompletas en sentidos opuestos: la primera pierde las apariciones, la segunda pierde el hecho de que eran una serie e infla 1 evento en 104 filas.
- EXDATE y RDATE. Las excepciones y las fechas añadidas no tienen columna. Una instancia cancelada reaparece si expandes la serie y vuelves a convertir.
- VALARM. Los recordatorios desaparecen. No hay columna para un componente anidado, y un evento con tres alarmas necesitaría tres juegos de columnas.
- VTIMEZONE. El bloque de definición se va. En el mejor caso el desfase queda incrustado en la marca de tiempo; en el peor, las horas se convierten en cadenas locales ambiguas que se desplazan al reimportar.
- Varios asistentes. Una celda puede contener una lista de direcciones separadas por comas, pero no el rol ni el estado de respuesta de cada persona.
- SEQUENCE, TRANSP, CLASS, CATEGORIES y las propiedades X-. Se descartan salvo que el conversor genere columnas explícitas para ellas.
Nada de esto es un argumento en contra de convertir. Es un argumento a favor de saber qué dirección es la que pierde información: de ICS a CSV se pierde estructura, y de CSV a ICS no se puede inventar una estructura que nunca estuvo en la hoja.
El flujo de ida y vuelta para editar en masa
La razón para convertir en ambos sentidos es editar cientos de eventos de una vez. La secuencia que funciona:
- Exporta el calendario a ICS desde la aplicación de origen y guarda ese archivo original intacto como plan B.
- Convierte de ICS a CSV. Decide si quieres las series recurrentes expandidas: expándelas si necesitas editar apariciones concretas, déjalas colapsadas si solo vas a tocar títulos y ubicaciones.
- Edita en Excel o Sheets. Mantén la fila de cabecera tal como salió, usa un formato de fecha coherente (ISO, AAAA-MM-DD, es la opción segura) y no borres la columna UID si la hay.
- Guarda como CSV UTF-8. El CSV a secas destroza los acentos y todo lo que no sea alfabeto latino básico.
- Convierte de CSV a ICS. Vuelve a añadir recurrencia, recordatorios y asistentes en la aplicación de destino si los eventos los tenían, porque la hoja de cálculo no podía transportarlos.
- Importa en un calendario de prueba y compara el recuento de eventos con el original antes de tocar el calendario real.
La decisión sobre el UID
Conservar los UID originales hace que la importación actualice los eventos existentes en lugar de añadir otros nuevos, que es lo que quieres cuando estás corrigiendo un calendario sobre sí mismo. Eliminarlos (o dejar que el conversor genere unos nuevos) crea un conjunto de eventos aparte, que es lo que quieres cuando estás generando un calendario nuevo a partir de otro antiguo como plantilla. Decídelo antes de importar, no después.
Regla rápida
Si el archivo lo va a leer una aplicación de calendario, tiene que ser ICS. Si lo va a analizar una persona o una herramienta, que sea CSV. Si lo va a leer código, usa JSON. iCalConverter.com convierte entre los tres dentro del navegador: no se sube nada, así que un calendario de cliente lleno de títulos de reuniones no sale de tu equipo.