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.
-
Desplácese hacia abajo y marque
Microsoft XML, V6.0
, luego haga clic enAceptar
.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:
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:
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.
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