Importar varios XML

3 envíos / 0 nuevos
Último envío
miguelvarez
Imagen de miguelvarez
Offline
última acción: Hace 1 año 8 meses
alta: 15/02/2016 - 19:39
Puntos: 45
Importar varios XML

  Buenos días a todos, 

  Me he registrado hace poco en el foro y estos días he intentado responder a alguna pregunta antes de plantear la mía propia, por aquello del karma Risa

  Mi consulta es la siguiente: 

 1. El ayuntamiento de Madrid ofrece en su open data los datos de tráfico en tiempo real (cada 5 minutos) de miles de medidores dispuestos por la ciudad. Es un archivo XML que se puede obtener en la siguiente url: 

  informo.munimadrid.es/informo/tmadrid/pm.xml

  2. Usando un script de python he conseguido bajarme los archivos durante un periodo largo de tiempo, nombrando cada archivo con una marca temporal (por ejemplo: 2016-02-17__07-42-59.xml)

  3. En otro foro he encontrado una macro que importa de golpe todos los xml a la misma hoja, uno a continuación de otro.

Es esta:

 Sub From_XML_To_XL()

On Error GoTo errh

Dim myWB As Workbook, WB As Workbook

Set myWB = ThisWorkbook

Dim myPath

myPath = "C:\Desktop\trafico\" '<<< change path

Dim myFile

myFile = Dir(myPath & "*.xml")

Dim t As Long

t = 1

Application.ScreenUpdating = False

Do While myFile <> ""

Set WB = Workbooks.OpenXML(Filename:=myPath & myFile)

WB.Sheets(1).UsedRange.Copy myWB.Sheets(1).Cells(t, "A")

WB.Close False

t = myWB.Sheets(1).UsedRange.Rows.Count + 2

myFile = Dir()

Loop

Application.ScreenUpdating = True

myWB.Save

Exit Sub

errh:

MsgBox "no files xml"

End Sub

 4. Mi problema viene ahora. Necesitaría que al importar los archivos se añadiera una columna al principio con el nombre del archivo xml correspondiente, de manera que me sirva de marca temporal para poder obtener una evolución del tráfico a lo largo del tiempo en un punto de medida concreto (adjunto ejemplo de cómo importa los datos y en rojo la columna que querría que apareciera)

  

Muchas gracias por adelantado

Miguel

 

 

AdjuntoTamaño
File traficos_madrid.xlsm12.45 KB

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 1 día 6 horas
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 7570
Hola MiguelTal y como

Hola Miguel

Tal y como funciona tu macro, lo que hace es abrir el archivo xml, copia el rango usado y lo pega en tu hoja consolidada donde vas guardando toda la información.

Esto que quieres hacer de añadir una columna con el nombre del archivo se puede hacer de muchas maneras, pero yo creo que un buen modo de hacerlo puede ser añadir esa columna al archivo xml individual que acabas de abrir, y luego copias y pegas todo al libro consolidado como haces ahora.

es decir, que yo añadiría una pequeña manipulación del archivo xml tras abrirlo y antes de copiar los datos.

dentro de tu bucle:

Do While myFile <> ""

    Set WB = Workbooks.OpenXML(Filename:=myPath & myFile)

    'necesitomas.com. inicio: añadir una primera columna con el nombre del archivo

    With WB.Sheets(1)

        .Columns("A:A").Insert Shift:=xlToRight 'insertamos columna

        .Range(.Cells(1, 1), .Cells(.UsedRange.Rows.Count, 1)).Value = myFile 'damos valor a todas las celdas nuevas

    End With

    'necesitomas.com. fin

    WB.Sheets(1).UsedRange.Copy myWB.Sheets(1).Cells(t, "A")

    WB.Close False

    t = myWB.Sheets(1).UsedRange.Rows.Count + 2

    myFile = Dir()

Loop

 

 

 

Data Tools Suite
datos y tablas con Excel

miguelvarez
Imagen de miguelvarez
Offline
última acción: Hace 1 año 8 meses
alta: 15/02/2016 - 19:39
Puntos: 45
Muchas gracias Paco! Funciona

Muchas gracias Paco! Funciona de maravilla! 

Saludos

PD: gracias a esto estoy pudiendo analizar cosas como la imagen adjunta

tráfico en túneles calle 30 madrid

 

it´s rude not being nude, dude