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
| Enfoque | Ventaja | Desventaja |
|---|---|---|
| Power Query | Visual, sin código | Se atasca con XMLs muy anidados |
| VBA + DOM | Control total, eficiente | Requiere programar |
| Power Automate Desktop | Automatizable, escalable | Requiere 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
- Del VBA a una sola fórmula: calcular el RFC mexicano con LET, MAP y expresiones regulares CasoHector llega al grupo con un problema que no se ve todos los días: tiene resuelto el cálculo del RFC mexicano, pero lo tiene en VBA, y quier
- Power Query: rutas dinámicas para compartir ficheros sin romper conexiones CasoUn miembro de la comunidad plantea un problema muy frecuente: tiene una consulta de Power Query con una ruta de red fija (\\servidor\shared-
- Optimización de Power Query para consultas masivas a API REST CasoInteresante caso de optimización en Power Query. Randolfo, desde Guatemala, necesitaba consultar el estado de más de 100 envíos de paqueterí
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Convertir archivos .xls a .xlsx en lote: VBA, Python y Power Automate CasoUn miembro de la comunidad tiene un sistema que genera archivos en formato .xls (Excel 97-2003) en una carpeta, y necesita convertirlos a .x
- Separar artículos concatenados en filas: 4 enfoques (fórmulas, Power Query y Python) CasoCaso interesante con cuatro enfoques muy distintos para resolver un mismo problema: una tabla tiene una columna de artículos concatenados co
- Consolidar múltiples archivos Excel con Power Query desde carpeta CasoUn miembro necesitaba consolidar datos de múltiples archivos Excel almacenados en una carpeta. El reto adicional: cada archivo contenía vari
- ¿Columnas con nombres distintos en Power Query? Tutorial¿Columnas con nombres distintos en Power Query? Aquí tienes la solución definitiva para normalizar tus datos y evitar errores al combinar fi
- Diagrama de GANTT con Ruta Crítica (CPM) 3/4 TutorialCalcula la ruta crítica de un proceso para poder graficar la información automáticamente
- Mapa de España con burbujas: ubicar variables por provincia usando coordenadas X/Y CasoEsta semana surgió una duda muy visual en el grupo: cómo mostrar dos variables por provincia en un mapa de España — una pintada en intensida