Como puedo modificar esta macro para que extraiga datos de una sección CDATA de mi archivo .xml

Cordiales a todos.

Encontré este código muy útil en este grupo de TODOEXPERTOS el cual modifique a mis necesidades para extraer los datos de archivos xml a una hoja de Excel.

Sub Extraerdatos()
Dim MiPc, Carpeta, Archivos, Archivo
Dim y, Fila, estado
Application.ScreenUpdating = False
Fila = Range("A" & Rows.Count).End(xlUp).Row + 1
Set MiPc = CreateObject("Scripting.FileSystemObject")
Set Carpeta = MiPc.GetFolder(Range("B1").Value)
Set Archivos = Carpeta.Files
For Each Archivo In Archivos
   If LCase(Right(Archivo.Name, 4)) = ".xml" Then
      Workbooks.OpenXML Filename:=Archivo
      y = 1: estado = ""
      Do Until Cells(2, y) = ""
         If Trim(Cells(2, y)) = "/estado" Then
            estado = Cells(3, y)
         End If
         If Trim(Cells(2, y)) = "/fechaAutorizacion" Then
            fecha = Cells(3, y)
         End If
         If Trim(Cells(2, y)) = "/numeroAutorizacion" Then
            nAutorizacion = Cells(3, y)
         End If
         If Trim(Cells(2, y)) = "/comprobante/factura/infoTributaria/ruc" Then
            ruc = Cells(3, y)
         End If
         y = y + 1
      Loop
      '--
      Archivo = ActiveWorkbook.Name
      ActiveWorkbook.Close
      Range("A" & Fila) = Archivo
      Range("B" & Fila) = estado
      Range("C" & Fila) = fecha
      Range("D" & Fila) = nAutorizacion
      Range("E" & Fila) = ruc
      Fila = Fila + 1
   End If
Next
End Sub

 El problema surge en el momento que deseo extraer el dato de ruc el cual se encuentra dentro de una sección CDATA por lo que no lo reconoce. Adjunto el código del archivo .xml

<?xml version="1.0" encoding="UTF-8"?>
<autorizacion>
    <estado>AUTORIZADO</estado>
    <numeroAutorizacion>1703201515411617921521270013730687438</numeroAutorizacion>
    <fechaAutorizacion>2015-03-17T15:41:16.486-05:00</fechaAutorizacion>
    <comprobante>
        <![CDATA[
        <?xml version="1.0" encoding="UTF-8"?>
        <factura id="comprobante" version="1.0.0">
            <infoTributaria>
                <ambiente>2</ambiente>
                <tipoEmision>1</tipoEmision>
                <razonSocial>UNNOCYCLES CIA. LTDA.</razonSocial>
                <nombreComercial>UNNOCYCLES CIA. LTDA.</nombreComercial>
                <ruc>1792152127001</ruc>
            </infoTributaria>
        </factura>
        ]]>
    </comprobante>
</autorizacion>

Muchas gracias de antemano a todos los que se den el tiempo de leer mi inquietud. 

1 respuesta

Respuesta
1

Para esta tarea debieras utilizar la herramienta 'Obtener datos externos' del menú Datos, opción 'De otras fuentes', importación XML.

Podés hacerlo manualmente, y si obtenés la col con el ruc y luego necesitas ayuda con la macro enviame un libro XML y la hoja destino con los encabezados. Mis correos están en el sitio que dejo al pie.

Muchas Gracias por gentileza ya envié la información al correo de su página

Te acabo de devolver el libro.

Manteniendo tu macro, podés obtener datos de la cadena buscando el inicio y fin, por ejemplo para el campo <ruc>----------------</ruc, del siguiente modo:

 'busca el texto 'ruc' o cualquier otro
         If InStr(1, Trim(Cells(2, y)), "/comprobante") > 0 Then
            ini = InStr(1, Trim(Cells(3, y)), "<ruc>") + 5
            fini = InStr(ini, Trim(Cells(3, y)), "</")
            If fini > ini Then ruc = Mid(Trim(Cells(3, y)), ini, fini - ini)
         End If
         Y = y + 1

Luego también agregué la limpieza de los campos y la opción de mostrarte como texto y no en notación científica.

Si esto resuelve tu consulta no olvides valorarla, sino comenta.

Muchas gracias Elsa Matilde.

¡Es exactamente lo que deseaba conseguir!

Usted me dio una solución fácil de comprender a algo que no sabía como solucionarlo. Con sus sugerencias creo que puedo lograr mi objetivo. 

Saludos cordiales.

Entonces quizás merezca una mejor valoración, ¿no te parece?. Aún puedes cambiarla.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas