Análisis de XML en Microsoft Excel VBA

Bilal Shahid 15 febrero 2024
  1. Importancia de un analizador XML
  2. Construya un analizador XML usando VBA
  3. Conclusión
Análisis de XML en Microsoft Excel VBA

Este artículo nos enseñará cómo analizar archivos XML en VBA.

Importancia de un analizador XML

Como usuario de Microsoft Excel, es común que reciba algunos datos en forma de archivo XML. Deberá recuperar la información del archivo XML y utilizarla en sus hojas o macros de VBA según sus requisitos.

Una forma de hacerlo es tratarlo como un archivo de texto y analizar la información. Pero esta no es una forma elegante de analizar archivos XML, ya que la información se almacena bien estructurada mediante etiquetas, y tratarla como un archivo de texto niega este concepto.

Por lo tanto, tendremos que hacer uso de un XML Parser. Un XML Parser lee el archivo XML y recupera los datos relevantes para que pueda usarse fácilmente.

Construya un analizador XML usando VBA

Podemos analizar un archivo XML usando VBA y convertir los datos en nuestra hoja de Excel. El método que utilizaremos utiliza la implementación XML DOM, abreviatura de XML Document Object Model, y este modelo nos permite representar el archivo XML como un objeto que luego podemos manipular según sea necesario.

Para comenzar a analizar su archivo XML a través de VBA, debe realizar una secuencia simple de pasos. Estos se explican a continuación.

Para analizar XML a través de VBA, debe tener MSXML.4.0 o superior en su sistema.

  • Agregar referencia a Microsoft XML

    Primero, debe agregar una referencia a Microsoft XML, V6.0 en el Editor de VBA. Así es como se hace:

    Abra el Editor de VBA desde la pestaña Desarrollador en Excel.

  • En el menú, vaya a Herramientas > Referencias.

    Ir a Referencias

  • Desplácese hacia abajo y marque Microsoft XML, V6.0, luego haga clic en Aceptar.

    Agregar referencia de Microsoft XML V6.0

    Tenga en cuenta que la versión de Microsoft XML depende del sistema operativo y de Microsoft Office instalado en su computadora.

  • Escriba el código VBA para cargar el archivo XML en XML DOM

    Supongamos que tenemos el siguiente archivo XML:

    <?xml version="1.0" encoding="ISO8859-1" ?>
    <menu>
    <food>
    <name> Halwa Puri </name>
    <price> $7.50 </price>
    <description> Halwa Puri is from Indian and Pakistani cuisines, having the sweet Halwa and the savory Puri which is a fried flatbread. </description>
    <calories> 900 </calories>
    </food>
    </menu>
    

    Podemos usar el siguiente código para analizar este archivo XML a través de VBA creando un objeto XML DOM de la siguiente manera:

    Sub XMLParser()
    
    Dim xDoc As New MSXML2.DOMDocument60
    Dim node As IXMLDOMElement
    Set xDoc = New MSXML2.DOMDocument60
    
    With xDoc
    .async = False
    .validateOnParse = True
    
    If xDoc.Load("D:\VBA\example.xml") = False Then
    Debug.Print .parseError.reason, .parseError.ErrorCode
    Exit Sub
    End If
    
    Set node = xDoc.SelectSingleNode("//price")
    MsgBox node.Text
    End With
    
    End Sub
    

En el código anterior, primero hemos creado una variable xDoc del tipo MSXML2.DOMDocument60. Aquí, hemos añadido 60 al final porque estamos usando la versión 6.0 de Microsoft XML, y sin el 60, este código generará un error en tiempo de compilación de No se encuentra el tipo definido por el usuario .

A continuación, hemos especificado que estamos trabajando con la variable xDoc usando la declaración Con. La propiedad .async define el permiso para descargas asíncronas, y la propiedad .validateOnParse indica si el analizador debe validar el documento XML.

Después de eso, usamos la función .Load para cargar el archivo XML especificado en la variable DOM. Aquí, puede cambiar la ruta y el nombre del archivo al de su computadora.

Las siguientes dos líneas son para el manejo de errores en caso de que el archivo XML no se cargue correctamente. Para probar si la carga ha funcionado, tomamos un nodo del archivo y especificamos su nombre como precio.

Debe tener en cuenta que el nombre del nodo distingue entre mayúsculas y minúsculas y debe especificarse de acuerdo con su archivo XML. Finalmente, mostramos el precio usando la propiedad node.Text en un cuadro de mensaje.

Producción:

Cargue el archivo XML en XML DOM

Esto muestra que la carga ha funcionado perfectamente bien.

Una forma de utilizar los datos del archivo XML es almacenarlos en una hoja de Excel. Hagamos algunos cambios en el código anterior para almacenar los datos en la hoja de Excel:

Sub XMLParser()

Dim xDoc As New MSXML2.DOMDocument60
Set xDoc = New MSXML2.DOMDocument60
Dim list As MSXML2.IXMLDOMNodeList
Dim osh As Worksheet
Set osh = ThisWorkbook.Sheets("Sheet1")
oRow = 1

With xDoc
.async = False
.validateOnParse = True

If xDoc.Load("D:\VBA\example.xml") = False Then
Debug.Print .parseError.reason, .parseError.ErrorCode
Exit Sub
End If

Set list = xDoc.SelectNodes("//price")
loopCount = 0
For Each node In list
oRow = oRow + 1
osh.Range("A" & oRow) = node.Text
Next
End With

End Sub

Aquí, estamos recuperando todos los nodos de precio y almacenándolos en la hoja. En este ejemplo, solo tenemos un nodo de precio que se guardará en la hoja de la siguiente manera:

use los datos del archivo XML para almacenarlos en una hoja de Excel

Puede modificar el código de acuerdo con su archivo XML y sus requisitos.

Conclusión

Esto resume nuestra discusión sobre el método para analizar archivos XML a través de VBA. En este artículo, hemos aprendido cómo construir un analizador XML utilizando XML DOM en VBA.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub