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
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
Muchas gracias por adelantado
Miguel
Adjunto | Tamaño |
---|---|
![]() | 12.45 KB |
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
------
Ya sé Excel, pero necesito más.
Muchas gracias Paco! Funciona de maravilla!
Saludos
PD: gracias a esto estoy pudiendo analizar cosas como la imagen adjunta
it´s rude not being nude, dude