← Todo el blog

Editar archivos de Office sin romperlos

Word, Excel y PowerPoint son archivos ZIP de XML. Así se cambia el texto conservando intactas fuentes, tablas y gráficos.

  • OOXML
  • Documentos
  • macOS

Un .docx es solo un ZIP de XML. Suena fácil — hasta que reemplazas algo de texto y ves el formato estallar. Traducir documentos de Office en local (Bobr Translate) me enseñó que el objetivo no es parsear el archivo, sino tocar lo menos posible de él.

El formato se esconde en los «runs»

Word parte una frase en «runs» — fragmentos que llevan su propio estilo. «Hola mundo» pueden ser tres runs porque el corrector lo rozó alguna vez. Traduce run a run y obtienes fragmentos sin sentido; aplánalo todo en un run y pierdes la negrita. La jugada es fusionar runs adyacentes que comparten formato, transformar el texto fusionado y volver a escribirlo en el primer run, vaciando el resto.

No toques lo que no entiendes

Tablas, gráficos, dibujos, notas al pie, hipervínculos — cada uno vive en su propia parte XML con sus reglas. La regla segura es brutal y simple: reescribe solo los nodos de texto que puedas identificar con certeza (w:t en Word, a:t en PowerPoint, la tabla de cadenas compartidas en Excel) y deja cada byte restante exactamente como estaba.

Excel guarda su texto en una tabla compartida

Excel almacena las cadenas una sola vez en sharedStrings.xml y las referencia por índice desde las celdas. Reescribe una entrada y cambias todas las celdas que apuntan a ella — eficiente, pero ojo con las cadenas en línea y jamás toques las celdas con fórmula.

Verifica reabriendo, no comparando XML

La única prueba que importa: ¿abre Office el resultado sin el diálogo de «encontramos un problema, ¿reparar?»? Los diffs de XML mienten; las apps reales son la verdad. Pasa cada muestra por Word, Excel y PowerPoint de verdad antes de confiar en el pipeline.

Conservarlo todo le gana a parsearlo todo. Toca el texto, teme el resto.