Extraer datos específicos de un xml

Me podrías apoyar en hacer un macros para extraer datos específicos de varios archivos xml

Y hacer una tabla en excel con datos como

Nombre Archivo

RFC Receptor

Nombre

Total

Departamento

Fecha de Pago

Fecha Inicial de Pago

Fecha Final de Pago

Días Pagados

Correo Electrónico

**TENGO LOS ARCHIVOS EN VARIAS CARPETAS ESTAS ESTÁN CONCENTRADAS EN UNA SOLA CARPETA***

1 respuesta

Respuesta
7

H o l a:

¿Todos los xml tienen la misma estructura?

Envíame 3 archivos de xml.

La información de los 3 xml la pones en un archivo de excel, en la manera que requieres dicha información, también me envías el archivo de excel con el concentrado de los 3 xml.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Jehu Chan” y el título de esta pregunta.

H o l a:

Te anexo la macro para extraer los datos:

Sub Extraccion()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets(1)
    h1.UsedRange.Offset(1, 0).ClearContents
    '
    datos = Array("/cfdi:Receptor/@rfc", _
                  "/cfdi:Receptor/@nombre", _
                  "/@total", _
                  "/cfdi:Complemento/nomina:Nomina/nomina:Percepciones/nomina:Percepcion/@Concepto", _
                  "/@fecha", _
                  "/cfdi:Complemento/nomina:Nomina/@FechaInicialPago", _
                  "/cfdi:Complemento/nomina:Nomina/@FechaFinalPago", _
                  "/cfdi:Complemento/nomina:Nomina/@NumDiasPagados")
    ruta = l1.Path & "\"
    arch = Dir(ruta & "*.xml")
    j = 2
    k = 2
    Do While arch <> ""
        Set l2 = Workbooks.Open(Filename:=ruta & arch)
        Set h2 = l2.Sheets(1)
        h1.Cells(j, "A") = arch
        For i = LBound(datos) To UBound(datos)
            Set b = h2.Rows(2).Find(datos(i), lookat:=xlPart)
            If Not b Is Nothing Then
                h1.Cells(j, k) = h2.Cells(3, b.Column)
                k = k + 1
            End If
        Next
        l2.Close
        j = j + 1
        k = 2
        arch = Dir()
    Loop
    h1.Cells.EntireColumn.AutoFit
    MsgBox "Fin"
End Sub


':)
'S aludos. D a n t e   A m o r . R ecuerda valorar la respuesta. G racias
':)

¿Me podrías apoyar para que saque esta descripción?

descripcion="PAGO DE NOMINA FRCA40208.0 A"

Saludos


Con mucho gusto te ayudo con todas tus peticiones.

Valora esta respuesta y crea una nueva pregunta en el tema de microsoft excel, en el desarrollo de la pregunta escribe: "para Dante Amor", ahí me describes con detalle en dónde quieres esa descripción y de dónde la obtengo.

es para la el mismo macro "para Dante Amor"

falto sacar ese dato

saludos

Envíame en un archivo de excel cuál es el dato que quieres, porque te estoy poniendo el que dice "Concepto"

Escribe un ejemplo completo dime de cuál xml estás tomando el ejemplo y ese ejemplo me lo pones en un archivo, para saber a qué te refieres con "descripción"

Envié por correo la información requerida 

saludos

Te anexo la macro actualizada:

Sub Extraccion()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets(1)
    h1.UsedRange.Offset(1, 0).ClearContents
    '
    datos = Array("/cfdi:Receptor/@rfc", _
                  "/cfdi:Receptor/@nombre", _
                  "/@total", _
                  "/cfdi:Conceptos/cfdi:Concepto/@descripcion", _
                  "/@fecha", _
                  "/cfdi:Complemento/nomina:Nomina/@FechaInicialPago", _
                  "/cfdi:Complemento/nomina:Nomina/@FechaFinalPago", _
                  "/cfdi:Complemento/nomina:Nomina/@NumDiasPagados")
    ruta = l1.Path & "\"
    arch = Dir(ruta & "*.xml")
    j = 2
    k = 2
    Do While arch <> ""
        Set l2 = Workbooks.Open(Filename:=ruta & arch)
        Set h2 = l2.Sheets(1)
        h1.Cells(j, "A") = arch
        For i = LBound(datos) To UBound(datos)
            Set b = h2.Rows(2).Find(datos(i), lookat:=xlPart)
            If Not b Is Nothing Then
                h1.Cells(j, k) = h2.Cells(3, b.Column)
                k = k + 1
            End If
        Next
        l2.Close
        j = j + 1
        k = 2
        arch = Dir()
    Loop
    h1.Cells.EntireColumn.AutoFit
    MsgBox "Fin"
End Sub

':)
'S aludos. D a n t e   A m o r . R ecuerda valorar la respuesta. G racias
':)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas