Eines

Automatització de documents: Excel i XML

Scripts per netejar llistats d'Excel amb duplicats i per convertir XML a DOCX: la feina avorrida, resolta.

Automatització de documents: Excel i XML

Hi ha feina que ningú contracta però tothom necessita: netejar llistats i convertir documents. Aquestes dues eines neixen exactament d’allà, i cap de les dues té res de brillant: resolen una feina avorrida i punt.

Els duplicats de l’Excel

El primer cas: llistats d’usuaris en Excel amb duplicats, perquè la mateixa persona s’havia registrat amb el mateix correu més d’un cop. A mà eren hores; amb pandas, una línia. Vaig fer un petit programa amb interfície gràfica: obres el fitxer, tries per quines columnes vols detectar els duplicats —el correu, normalment— i genera la taula neta. La primera versió funcionava, però la lògica i la interfície estaven barrejades i cada canvi era una aventura. La segona versió va separar bé les funcions de la GUI i va afegir un requirements.txt, que és el que fa que qualsevol persona la pugui executar sense preguntar-te res.

De l’XML al Word, amb estils d’InDesign

La segona eina té més història. Treballava amb un GPT personalitzat que generava contingut en XML, i aquell XML havia d’acabar sent un document de Word amb estils de caràcter i de paràgraf que l’InDesign reconegués en importar-lo. La clau és un fitxer de configuració on cada camp de l’XML es mapeja a un estil: a l’esquerra tries el camp i a quin estil va —si és de paràgraf o de caràcter—, a la dreta tries els fitxers, la carpeta de destí i el nom del document final.

La primera versió va destapar un problema que no havia previst: quan l’XML arribava amb els camps en un ordre diferent, el resultat es trencava. Vaig haver de tractar l’ordre com una cosa que no pots assumir mai, i vaig afegir un camí específic per als fitxers que venien desordenats.

Empaquetar perquè el faci servir tothom

Escriure el script va ser la meitat; l’altra meitat va ser que el pogués executar gent que no sap què és un entorn virtual. Amb PyInstaller el vaig compilar com a aplicació, i per cobrir Mac amb chip M1 i Mac Intel vaig muntar un entorn conda x86_64 a part per fer la compilació creuada. Tres fitxers de especificacions: M1, Intel i Windows.

Què faria diferent avui

Començaria pel fitxer de configuració i per les validacions, no per la interfície: validar l’ordre dels camps i l’estructura de l’XML abans de convertir hauria estat el primer pas, no un pegat després. I pensaria en l’empaquetat des del primer dia, perquè una eina que ningú més que tu pot executar es queda a mig camí. Tot i així, entre les dues van desaparèixer unes quantes hores setmanals de feina que no volia tornar a fer mai més.