Eines
Automatització de documents: Excel i XML
Scripts per netejar llistats d''Excel amb duplicats i per convertir XML
3 min de lectura
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. De la mateixa família d'eines petites és el pont entre plataformes d'aprenentatge.
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 llibreria de Python per tractar taules), una línia. Vaig fer un petit programa amb interfície gràfica (finestres i botons, res de terminal): 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 (la llista de components que cal instal·lar), 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 (un format de text amb etiquetes), i aquell XML havia d'acabar sent un document de Word amb estils de caràcter i de paràgraf (les etiquetes de format) que l'InDesign, el programa de maquetació, 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 l'script (el programa) va ser la meitat; l'altra meitat va ser que el pogués executar gent que no sap què és un entorn virtual (un espai aïllat amb les llibreries d'un projecte). Amb PyInstaller, que empaqueta tot dins una aplicació, el vaig compilar, i per cobrir Mac amb chip M1 i Mac Intel vaig muntar un entorn conda x86_64 a part per fer la compilació creuada (compilar per a un sistema diferent del teu). Tres fitxers d'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.