13 de julio de 2011

[VBA] Serie MSXML - Creando un documento XML en Excel

A veces resulta muy necesario importar información de un archivo de excel, y uno de los formatos mas ampliamente usados por su interoperabilidad es el XML.
Esta es la hoja de excel que convertiremos a XML.


Para lograr esto, tendremos que agregar las referencia Microsoft XML 5.0 (msxml.dll), tienes que ir a Herramientas/Referencias y elige esta versión o la más actual que tengas instalada.





Código VBA:

Sub ConvetirAXml()

Dim fila As Integer

Dim documento As DOMDocument
Dim registros As IXMLDOMElement
Dim registro As IXMLDOMElement
Dim atributo As IXMLDOMAttribute
Dim columna As IXMLDOMElement
Dim encoding As IXMLDOMProcessingInstruction

fila = 2

Set documento = New DOMDocument

Set encoding = documento.createProcessingInstruction("xml", "version='1.0' encoding='iso-8859-1'")
documento.appendChild encoding

Set registros = documento.createElement("registros")
documento.appendChild registros

Do While datos.Cells(fila, "B") <> ""

    Set registro = documento.createElement("registro")
    registros.appendChild registro
    
    'COLUMNA ID
    Set columna = documento.createElement(datos.Cells(1, "A"))
    registro.appendChild columna
    columna.Text = datos.Cells(fila, "A")
    
    Set atributo = documento.createAttribute("id")
    atributo.NodeValue = fila
    registro.setAttributeNode atributo
        
    'COLUMNA DATO
    Set columna = documento.createElement(datos.Cells(1, "B"))
    registro.appendChild columna
    columna.Text = datos.Cells(fila, "B")
    
    Set atributo = documento.createAttribute("id")
    atributo.NodeValue = fila
    registro.setAttributeNode atributo
        

fila = fila + 1

Loop

documento.Save ThisWorkbook.Path & "\datos.xml"

End Sub

Archivo XML Generado:

<?xml version="1.0" encoding="iso-8859-1"?>
<registros>
   <registro id="2">
      <ID>1</ID>
      <DATO>A</DATO>
   </registro>
   <registro id="3">
      <ID>2</ID>
      <DATO>B</DATO>
   </registro>
   <registro id="4">
      <ID>3</ID>
      <DATO>C</DATO>
   </registro>
   <registro id="5">
      <ID>4</ID>
      <DATO>D</DATO>
   </registro>
   <registro id="6">
      <ID>5</ID>
      <DATO>E</DATO>
   </registro>
</registros>

Descargar ejemplo

Descarga el archivo de excel posicionate sobre la hoja que se llama DATOS y presiona F9, en la misma ubicación donde descargaste o colocaste el archivo, si tienes algun problema para ejecutarlo puede deberse a que tendras que habilitar el uso de macros y activeX en excel. Como buena práctica les recomiendo ir guardando y organizando los códigos que vamos haciendo en nuestro día a día, les sugiero un muy buen code snippets manager que se llama SnipItPro.  

No hay comentarios:

Publicar un comentario