Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿Falta texto al exportar notas de PowerPoint? Audite cuatro estados antes de aceptar el guion

Un resultado vacío puede tener tres causas distintas. Nuestra prueba con un PPTX conserva todas las diapositivas y distingue un cuerpo ausente de unas notas vacías.

Ilustración original: Auditoría de cuatro estados: compruebe primero la diapositiva de notas existente y después BODY; distinga ausencia, BODY ausente, BODY vacío y texto.
Ilustración original: Auditoría de cuatro estados: compruebe primero la diapositiva de notas existente y después BODY; distinga ausencia, BODY ausente, BODY vacío y texto. Watch at Ease

Una exportación de notas puede finalizar sin errores y omitir parte de una presentación. Antes de aceptar el guion, registre un resultado por diapositiva: sin diapositiva de notas, sin marcador BODY, BODY vacío o BODY con texto. No confunda las dos primeras situaciones con una nota que se dejó vacía a propósito.

Probamos este límite con un PPTX original de cuatro diapositivas, Python 3.12.14 y python-pptx 1.0.2. Tras cambiar deliberadamente el orden de presentación, el archivo guardado produjo los identificadores 259, 257, 256 y 258. Sus componentes de notas eran notesSlide3, ninguno, notesSlide1 y notesSlide2. Ordenar los nombres de archivo de las notas no reproduce esa secuencia.

La auditoría mantuvo cuatro registros y las tres diapositivas de notas existentes, sin cambiar el SHA-256 del archivo de entrada. Una nota con coma, comillas, salto de línea y texto chino se conservó exactamente tras escribir y releer el CSV. Una lectura ingenua aparte creó una cuarta diapositiva de notas en memoria; acceder a .text cuando faltaba BODY provocó AttributeError.

Son resultados controlados de extracción de texto, no una prueba de visualización ni de reparación en PowerPoint. El objetivo es identificar qué se leyó y qué debe revisar el autor antes de generar un guion de conferencia o datos para otro proceso.

Recorra la secuencia real y conserve cuatro resultados

Abra una copia preservada con Presentation(path), recorra enumerate(prs.slides, 1) y registre la posición junto con slide.slide_id. El identificador pertenece a esa presentación; no es universal entre archivos independientes. Siga la relación de notas de cada diapositiva, en lugar de asignar notesSlideN.xml a la diapositiva N.

Primero compruebe has_notes_slide. False significa no-notes-slide: no acceda a notes_slide. En caso contrario, obtenga notes_slide.notes_text_frame. None significa no-body-placeholder; .text igual a la cadena vacía significa body-empty; cualquier otra cadena significa body-text. Conserve el texto original, incluidos los espacios. Si necesita señalar notas que solo contienen espacios, añada otra marca en vez de aplicar strip silenciosamente.

Un BODY ausente es una excepción que revisar

El marcador BODY es el destino previsto del texto de las notas. La página puede contener otros objetos de texto y marcadores. En nuestro caso sin BODY, un objeto personalizado tenía un mensaje de revisión y el marcador del número de diapositiva contenía 999. La auditoría registró por separado sus identificadores, nombres, tipos y textos; la columna de notas del orador quedó vacía.

No concatene todos los objetos en el guion ni repare automáticamente el archivo. Pregunte al autor si el texto personalizado corresponde al cuerpo de notas. La ausencia de BODY no demuestra por sí sola corrupción ni un defecto de la biblioteca. La incidencia 983 del proyecto se cerró después de pedir un ejemplo que no se aportó; esta guía no establece su causa.

Haga verificable la exportación sin perder su significado

Use columnas explícitas como position, slide_id, state y notes; mantenga aparte un inventario JSON de los objetos cuando falte BODY. Escriba el CSV con csv.DictWriter, UTF-8 y newline='', y vuelva a abrirlo con csv.DictReader. Compare número de registros, posiciones, identificadores, estados y cadenas completas. Cuente los registros analizados, no las líneas físicas: una nota entre comillas puede ocupar varias líneas.

La escritura CSV predeterminada puede convertir None en un campo vacío, por lo que la columna state conserva la distinción. En la prueba sobrevivieron los cuatro estados y la nota con comillas, salto de línea y chino se recuperó exactamente. Abrir una salida nueva con modo 'x' también rechazó un destino existente. Preserve el PPTX original y no llame a prs.save solo para exportar texto.

Resuelva la lista de excepciones antes de aceptar el guion

El número de resultados debe coincidir con el total de diapositivas y cada posición debe aparecer una sola vez. Revise con el autor los registros no-notes-slide y no-body-placeholder. body-empty informa de un marco existente vacío, pero no demuestra que el autor quisiera dejarlo así. Si las omisiones son inaceptables, detenga el procesamiento posterior hasta registrar esas decisiones.

La documentación oficial ya explica la comprobación sin crear notas y la ausencia de BODY. Hay scripts completos que gestionan None o exportan solo notas no vacías, y un tutorial revisado de CSV con tres estados registra de forma segura notas ausentes y vacías. Nuestra aportación es la cuarta excepción reproducible y su comparación de aceptación. No probamos interfaces de PowerPoint, Keynote o Google Slides, archivos .ppt antiguos, paquetes cifrados o maliciosos, fidelidad del formato enriquecido, texto heredado del patrón ni recuperación universal de objetos arbitrarios.

Ilustración original: En el archivo reordenado, los identificadores 259, 257, 256 y 258 corresponden a componentes de notas 3, ninguno, 1 y 2; cuatro registros conservan la excepción.
Ilustración original: En el archivo reordenado, los identificadores 259, 257, 256 y 258 corresponden a componentes de notas 3, ninguno, 1 y 2; cuatro registros conservan la excepción. Watch at Ease