Extraer datos de archivos XML complejos: Power Query, VBA y Power Automate

Sergio plantea un problema real con datos abiertos del gobierno español: archivos XML de licitaciones públicas con más de 30 niveles de anidación. Un archivo de 4 MB se convierte fácilmente en 60 MB al expandirlo en Power Query, haciendo inviable el enfoque manual de expandir columnas una por una.

Manuel aporta la primera pista: la plataforma del estado tiene datos abiertos en formato ATOM, y existe un software oficial para pasarlo a Excel. Además, él extrae datos mediante un robot hecho con Power Automate Desktop, lo que permite automatizar la descarga y procesamiento de múltiples archivos.

Jesús ofrece una alternativa desde VBA: tratar los archivos XML directamente con DOM (Document Object Model), navegando la estructura del XML programáticamente en vez de intentar expandirlo todo en una tabla. Comparte un ejemplo funcional en su web con el código VBA completo.

Tres enfoques para el mismo problema:

| Enfoque | Ventaja | Desventaja |
|---------|---------|------------|
| Power Query | Visual, sin código | Colapsa con XMLs muy anidados |
| VBA + DOM | Control total, eficiente | Requiere programar |
| Power Automate Desktop | Automatizable, escalable | Requiere licencia/setup |

Un caso donde la solución depende del contexto: volumen de archivos, frecuencia de actualización y nivel técnico del usuario.

Tres formas de domar un XML imposible

Sergio se topó con un problema muy real de datos abiertos: los ficheros XML de licitaciones públicas del gobierno español, con más de treinta niveles de anidación. Un archivo de 4 MB se hincha hasta 60 MB al expandirlo en Power Query, así que ir columna por columna es inviable. La comunidad respondió con tres caminos distintos.

Enfoque 1: Power Query (cuando el XML es manejable)

Power Query es la vía visual y sin código: conectas el XML y vas expandiendo registros. Funciona de maravilla con estructuras planas o poco anidadas. El problema aparece con XMLs muy profundos como el de las licitaciones, donde cada expansión multiplica filas y el fichero colapsa. Manuel aportó un matiz importante: la plataforma estatal publica los datos en formato ATOM y existe una herramienta oficial para pasarlos a Excel, lo que evita pelearse con el XML en crudo.

Enfoque 2: VBA con DOM (control total)

Jesús propuso tratar el XML directamente con DOM (Document Object Model). En lugar de intentar volcar todo a una tabla, navegas la estructura del documento por programación y extraes solo los nodos que te interesan. Es eficiente y no infla el fichero, a cambio de escribir código. Jesús compartió en su web un ejemplo funcional con el VBA completo.

Enfoque 3: Power Automate Desktop (automatización a escala)

Manuel también extrae estos datos con un robot hecho en Power Automate Desktop. La ventaja es que automatiza la descarga y el procesamiento de muchos ficheros seguidos, ideal cuando el volumen y la frecuencia son altos. El coste: requiere licencia y una puesta a punto inicial.

Cuándo usar cada uno

EnfoqueVentajaDesventaja
Power QueryVisual, sin códigoSe atasca con XMLs muy anidados
VBA + DOMControl total, eficienteRequiere programar
Power Automate DesktopAutomatizable, escalableRequiere licencia y configuración

Funciones y herramientas clave

  • Power Query: importación visual, perfecta para estructuras poco anidadas.
  • VBA + DOM: recorrido programático del árbol XML, nodo a nodo.
  • Power Automate Desktop: orquesta descarga y procesado en lote.
  • Formato ATOM y herramienta oficial: el atajo cuando la fuente ya ofrece una alternativa preparada.

Conclusión

No hay una respuesta única: la mejor solución depende del volumen de archivos, la frecuencia de actualización y el nivel técnico de quien lo mantiene. Para una consulta puntual, Power Query o la herramienta oficial. Para un proceso recurrente y grande, VBA o Power Automate. Este caso resume bien el espíritu de la comunidad de InflueXcel: un mismo problema, varias mentes y tres caminos válidos según tu contexto.

Más casos con estas funciones

Más contenido de Excel en InflueXcel