Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

Combina los informes de asistencia de Teams en un solo libro de Excel

Combina una carpeta de archivos CSV de asistencia de Teams en inglés y conserva los nombres de los asistentes, los datos de cada reunión, las duraciones originales y un registro de todos los archivos de entrada.

Diagrama original que muestra los campos de Summary añadidos a cada fila de Participants, mientras que la sección independiente In-Meeting Activities se excluye de la tabla de detalle combinada.
Ilustración editorial original: conserva cada fila de Participants junto con el Summary de su reunión y el archivo de origen. Los intervalos de Activities se mantienen aparte; una fila no equivale a una persona única verificada. Watch at Ease

Para combinar estos informes, toma la tabla Participants de cada uno y añade los campos de Summary de ese mismo informe antes de unir las filas. El conversor que encontrarás a continuación hace esto con una carpeta de archivos CSV de Teams en inglés que tengan un formato compatible y crea un solo libro con las hojas Participants, Meetings y Files.

El resultado mantiene juntos los nombres, los valores originales de entrada y salida, las duraciones de asistencia y los nombres de los archivos de origen. También crea audit.json con los valores originales de los participantes y del resumen para que puedas contrastar el libro con sus archivos de entrada. Necesitas Python 3.11 o una versión posterior que siga recibiendo soporte, y una terminal de escritorio; el conversor procesa los archivos descargados en tu ordenador.

Comprueba que tus informes tengan esta estructura

Abre un informe como texto o examínalo sin guardar cambios. Esta versión requiere tres etiquetas de sección en este orden: 1. Summary, 2. Participants y 3. In-Meeting Activities. La estructura se contrastó con un informe original publicado de forma independiente; se trata de un formato de entrada definido, sin garantizar que todas las exportaciones de Teams tengan la misma estructura.

Summary debe contener Meeting title, Attended participants, Start time, End time, Meeting duration y Average attendance time. Su orden puede variar y los campos adicionales del resumen se conservan. Meeting title puede estar vacío; los otros cinco valores obligatorios deben estar presentes.

El encabezado de Participants debe contener exactamente estos siete campos, en este orden: Name, First Join, Last Leave, In-Meeting Duration, Email, Participant ID (UPN), Role. Email y Participant ID (UPN) pueden estar vacíos. Los demás valores obligatorios de los participantes deben estar presentes.

El encabezado de Activities debe contener exactamente estos seis campos, en este orden: Name, Join Time, Leave Time, Duration, Email, Role. El conversor comprueba la estructura de esta sección, pero no añade sus filas de intervalos a Participants. Admite archivos UTF-8 y UTF-16 con marca de orden de bytes, además de UTF-8 sin ella, con tabulaciones, comas o puntos y comas, siempre que la estructura completa coincida.

Reúne los informes que quieras combinar en una carpeta

Crea una carpeta de trabajo llamada Teams-Month y una subcarpeta llamada reports. Coloca los archivos CSV que quieras combinar directamente dentro de reports. No se buscan archivos en las subcarpetas. Conserva los originales descargados; abrirlos y volver a guardarlos en una aplicación de hojas de cálculo puede cambiar las fechas, la codificación u otros valores antes de que el conversor los lea.

Elige un informe definitivo para cada sesión de reunión que quieras incluir. Microsoft proporciona informes separados para cada sesión de una reunión periódica. Si todavía te falta un archivo y tienes acceso como organizador o coorganizador, abre el chat de la reunión pasada, selecciona Attendance y descarga su CSV. Utiliza el informe posterior a la reunión al preparar el conjunto del mes.

La selección de archivos define el lote. Dos informes de una misma reunión pueden tener contenidos distintos, así que una huella digital de archivo diferente no demuestra que se trate de otra sesión. El conversor no decide qué revisión de un informe querías conservar.

Descarga y ejecuta el conversor

Si lo necesitas, instala desde https://www.python.org/downloads/ una versión de Python 3 que siga recibiendo soporte. En Windows, abre PowerShell; en macOS, abre Terminal. Ve a tu carpeta de trabajo Teams-Month con cd seguido de su ruta completa entre comillas. Por ejemplo, sustituye la ruta de ejemplo en cd "C:\path\to\Teams-Month" en Windows o en cd "/path/to/Teams-Month" en macOS.

Comprueba el intérprete antes de continuar: ejecuta python --version en Windows o python3 --version en macOS. Debe indicar Python 3.11 o una versión posterior. Si el comando no se encuentra, termina la instalación oficial y vuelve a abrir la terminal; la falta del intérprete es un problema distinto de un error en el formato del informe.

En Windows, descarga la versión 1 del programa auxiliar con este comando de PowerShell. Guarda el archivo de código fuente, pero no lo ejecuta:

Invoke-WebRequest -UseBasicParsing -Uri "https://watchatease.com/guide-tools/merge-teams-attendance-v1.py" -OutFile "merge-teams-attendance-v1.py"

En macOS, descarga el mismo archivo con:

curl --fail --location "https://watchatease.com/guide-tools/merge-teams-attendance-v1.py" --output "merge-teams-attendance-v1.py"

Cuando la descarga termine correctamente, ejecuta el siguiente comando en Windows. La carpeta reports ya debe existir y month-output no debe existir:

python "merge-teams-attendance-v1.py" "reports" --output-dir "month-output"

En macOS, ejecuta:

python3 "merge-teams-attendance-v1.py" "reports" --output-dir "month-output"

Si se ejecuta correctamente, crea teams-attendance.xlsx y audit.json dentro de month-output y muestra el número de filas de participantes, los informes conservados y los archivos omitidos por ser copias exactas. Abre el libro para examinarlo. Para una ejecución posterior, elige un nombre de salida nuevo, como month-output-2; el programa auxiliar se niega a sustituir un directorio existente. No necesita paquetes adicionales de Python ni realiza solicitudes de red mientras procesa tus informes.

Interpreta las tres hojas del libro

Participants es la tabla de detalle combinada. Sus siete primeras columnas conservan los campos originales de los participantes. Source file y Source SHA256 identifican el informe de entrada; a continuación aparecen columnas que empiezan por Summary: y contienen los datos de la reunión de ese informe. Filtra Source file para ver un informe, o filtra Name o Email para examinar las entradas de los informes seleccionados.

Meetings contiene una fila por cada informe conservado, con su origen, el número de filas de participantes, la comparación de recuentos y los valores de Summary. Su número de filas es un recuento de los archivos de informe conservados. Se convierte en una lista útil de reuniones una vez que hayas seleccionado un informe por cada sesión que quieras incluir.

Files da cuenta de todos los CSV de entrada, incluidas las copias exactas. Status es included o exact_duplicate_skipped; Duplicate of identifica el archivo conservado al que corresponde una copia. Participants rows y Activities rows excluded permiten ver cómo se han tratado las dos secciones. Count check compara el valor de Attended participants de Summary con el número de filas de Participants cuando ese valor está formado únicamente por dígitos decimales.

audit.json registra el mismo inventario de archivos, los recuentos y la huella digital del libro, además de retained_reports, que contiene las filas originales de Participants y los pares de clave y valor de Summary en su orden original. Guárdalo junto a los CSV originales. Ofrece un registro directo de los valores de entrada por si una aplicación de hojas de cálculo modifica después una celda o normaliza los finales de línea al guardar.

Comprueba el lote antes de utilizar sus totales

Primero, cuenta los archivos CSV que están directamente en reports y compara ese número con la hoja Files y con input_file_count en audit.json. Cada archivo que querías incluir debe tener una entrada. Las copias exactas se cuentan en Files, pero no añaden filas a Participants ni a Meetings.

Después, filtra Files por included y suma sus valores de Participants rows tras convertir esas celdas de recuento en números en una copia de trabajo aparte, o utiliza participant_rows_written en audit.json. Ese total debe coincidir con el número de filas de datos de Participants, sin contar el encabezado. Al principio, todas las celdas del libro son de texto para conservar sus valores.

Para cada archivo de origen incluido, compara sus campos de Summary y una entrada de participante con el informe original. Comprueba, en particular, el nombre, In-Meeting Duration y el valor de inicio de la reunión correspondiente. Un título de reunión vacío sigue vacío, por lo que Source file aporta un contexto útil.

Si Count check indica DIFFERS, el libro sigue pudiendo abrirse y conserva los datos, pero hay que examinar la discrepancia en el informe de origen. Que los recuentos coincidan demuestra que ambos números concuerdan; no verifica que cada fila represente a una persona diferente ni que el informe de origen esté completo.

Interpreta las fechas, las duraciones y los nombres repetidos en su contexto

Un valor como 3/04/24 se mantiene exactamente como ese texto. El conversor no supone si significa 4 de marzo o 3 de abril. Averigua qué convención de fechas utiliza la exportación antes de hacer cálculos con fechas en una copia de análisis aparte, y mantén disponibles las columnas con los valores originales.

In-Meeting Duration se conserva tal como figura en el informe. El programa auxiliar no resta First Join de Last Leave, no suma los intervalos de actividad, no aplica un umbral de asistencia ni calcula horas para una certificación. Esos son cálculos adicionales con sus propios supuestos; el libro proporciona los campos del informe en los que se basarían.

Las filas no se fusionan por nombre, correo electrónico ni Participant ID (UPN). Un mismo nombre visible puede aparecer en varias entradas, y un correo electrónico vacío permanece vacío. Es normal que una persona aparezca más de una vez si ha participado en distintas sesiones.

Microsoft documenta limitaciones de los informes de origen, entre ellas la omisión de las personas a las que nunca se admitió desde la sala de espera y de los asistentes en modo de solo visualización. Consolidar los archivos descargados no puede recuperar la información que falta en ellos. Utiliza el libro como una versión organizada de esos informes, con sus limitaciones.

Si se rechaza un archivo

Un encabezado no compatible, una sección ausente, un campo entre comillas con formato incorrecto, un valor obligatorio vacío o un archivo que no se pueda leer produce un error que identifica el nombre del archivo afectado. El conversor comprueba el lote antes de crear la salida; no omite un CSV rechazado sin avisar ni presenta los datos restantes como si estuvieran completos.

Compara el archivo indicado con la estructura de tres secciones descrita anteriormente. Si se volvió a guardar por accidente o se dañó, utiliza una nueva exportación original si hay una disponible. Mantén fuera de esta carpeta de entrada los informes de otro producto o con una estructura diferente. Evita cambiar el nombre de una columna desconocida solo para superar la validación, porque una etiqueta parecida puede describir otros datos.

Si tu informe original utiliza otro idioma u otra estructura, este programa auxiliar no lo admite. Una alternativa es una transformación de Power Query adaptada a esa estructura real. La documentación de Microsoft sobre la combinación de archivos de una carpeta explica cómo aplicar una transformación de un archivo de ejemplo a todos los archivos coincidentes y conservar el nombre de cada archivo de origen.

Un error de directorio de salida exige elegir un destino nuevo, mientras que un error por falta de Python exige corregir la instalación del intérprete. Ninguno de los dos justifica alterar el contenido de los informes. Conserva el error y el archivo de origen hasta resolver el problema correspondiente.

Cuándo conviene utilizar otro método

El tutorial de Power Automate que ya publicó Tom Riha extrae Participants cuando se carga un informe y puede resultar adecuado para un flujo de carga continuo. Los administradores autorizados también pueden utilizar flujos de informes o de datos de auditoría para recopilar información sobre las reuniones. El método de esta guía parte de la carpeta de informes que ya tienes y genera su libro consolidado en una sola ejecución.

El conversor sigue el formato indicado y escribe las celdas como texto literal. Sus pruebas utilizan informes ficticios, incluidos nombres entre comillas, campos de identidad vacíos, varias codificaciones, archivos repetidos y casos de fallo. Esto no equivale a una prueba en el entorno de Teams de tu organización ni garantiza que todos los programas de hojas de cálculo conserven cada cadena de texto al volver a guardar. Mantén los CSV originales y el archivo de auditoría con los valores originales como referencia.

Diagrama original que muestra cómo se analiza una carpeta de informes para crear las hojas Participants, Meetings y Files de un libro, con una rama de detención por formato no compatible y el tratamiento de los archivos que son copias exactas.
Ilustración editorial original: se registra cada archivo de entrada y solo se omiten como copias los archivos de contenido idéntico. Meetings tiene una fila por cada informe conservado; las diferencias de recuento siguen visibles para su revisión. Watch at Ease