Contenido
He analizado repetidamente formas de importar datos a Excel desde Internet con la posterior actualización automática. En particular:
- En versiones anteriores de Excel 2007-2013, esto se podía hacer con una solicitud web directa.
- A partir de 2010, esto se puede hacer de manera muy conveniente con el complemento Power Query.
A estos métodos en las últimas versiones de Microsoft Excel, ahora puede agregar otro: importar datos de Internet en formato XML usando funciones integradas.
XML (eXtensible Markup Language = Extensible Markup Language) es un lenguaje universal diseñado para describir cualquier tipo de datos. De hecho, es texto sin formato, pero con etiquetas especiales añadidas para marcar la estructura de datos. Muchos sitios ofrecen flujos gratuitos de sus datos en formato XML para que cualquiera los descargue. En el sitio web del Banco Central de Nuestro País (www.cbr.ru), en particular, con la ayuda de una tecnología similar, se brindan datos sobre los tipos de cambio de varias monedas. Desde el sitio web de la Bolsa de Moscú (www.moex.com) puede descargar cotizaciones de acciones, bonos y mucha otra información útil de la misma manera.
Desde la versión 2013, Excel tiene dos funciones para cargar directamente datos XML de Internet en las celdas de la hoja de cálculo: SERVICIO WEB (SERVICIO WEB) и FILTRO.XML (FILTROXML). Trabajan en parejas – primero la función SERVICIO WEB ejecuta una solicitud al sitio deseado y devuelve su respuesta en formato XML, y luego usa la función FILTRO.XML "analizamos" esta respuesta en componentes, extrayendo los datos que necesitamos de ella.
Veamos el funcionamiento de estas funciones utilizando un ejemplo clásico: importar el tipo de cambio de cualquier moneda que necesitemos para un intervalo de fechas determinado desde el sitio web del Banco Central de Nuestro País. Usaremos la siguiente construcción como un espacio en blanco:
Aquí:
- Las celdas amarillas contienen las fechas de inicio y finalización del período que nos interesa.
- El azul tiene una lista desplegable de monedas usando el comando Datos – Validación – Lista (Datos — Validación — Lista).
- En las celdas verdes, usaremos nuestras funciones para crear una cadena de consulta y obtener la respuesta del servidor.
- La tabla de la derecha es una referencia a los códigos de moneda (la necesitaremos un poco más adelante).
¡Vamonos!
Paso 1. Formar una cadena de consulta
Para obtener la información requerida del sitio, debe solicitarla correctamente. Vamos a www.cbr.ru y abrimos el enlace en el pie de página de la página principal' Recursos técnicos'- Obtener datos usando XML (http://cbr.ru/desarrollo/SXML/). Nos desplazamos un poco más abajo y en el segundo ejemplo (Ejemplo 2) habrá lo que necesitamos: obtener los tipos de cambio para un intervalo de fechas determinado:
Como puede ver en el ejemplo, la cadena de consulta debe contener fechas de inicio (fecha_req1) y terminaciones (fecha_req2) del período que nos interesa y el código de moneda (VAL_NM_RQ), la tasa de la que queremos obtener. Puede encontrar los principales códigos de moneda en la siguiente tabla:
Moneda | Código | | Moneda | Código |
Dólar australiano | R01010 | Litas lituano | R01435 | |
chelín austríaco | R01015 | cupón lituano | R01435 | |
Manat azerbaiyano | R01020 | Leu moldavo | R01500 | |
Libra | R01035 | РќРμРјРμС † РєР ° СЏ РјР ° СЂРєР ° | R01510 | |
Nuevo kwanza angoleño | R01040 | florín holandés | R01523 | |
Dram Armenio | R01060 | Corona noruega | R01535 | |
Rublo bielorruso | R01090 | Zloty polaco | R01565 | |
franco belga | R01095 | escudo portugués | R01570 | |
El león búlgaro | R01100 | Leu rumano | R01585 | |
Real brasileño | R01115 | Dolar de Singapur | R01625 | |
Florín húngaro | R01135 | dólar de surinam | R01665 | |
Dolar de Hong Kong | R01200 | somoni tayiko | R01670 | |
dracma griego | R01205 | rublo tayiko | R01670 | |
Corona danesa | R01215 | Lira turca | R01700 | |
Dólar de EE.UU. | R01235 | Manat turcomano | R01710 | |
Euro | R01239 | Nuevo manat turcomano | R01710 | |
Rupia india | R01270 | Suma uzbeka | R01717 | |
Libra irlandesa | R01305 | Hryvnia de Ucrania | R01720 | |
corona islandesa | R01310 | Karbovanets ucranianos | R01720 | |
peseta española | R01315 | marca finlandesa | R01740 | |
lira italiana | R01325 | Franco francés | R01750 | |
tenge kazajo | R01335 | Corona checa | R01760 | |
Dolar canadiense | R01350 | Corona sueca | R01770 | |
som kirguís | R01370 | franco suizo | R01775 | |
Yuan chino | R01375 | corona estonia | R01795 | |
Dinar kuwaití | R01390 | nuevo dinar yugoslavo | R01804 | |
Latts letones | R01405 | Rand sudafricano | R01810 | |
Libra libanesa | R01420 | República de Corea ganó | R01815 | |
Yen japonés | R01820 |
Una guía completa de códigos de moneda también está disponible en el sitio web del Banco Central; consulte http://cbr.ru/scripts/XML_val.asp?d=0
Ahora formaremos una cadena de consulta en una celda de una hoja con:
- el operador de concatenación de texto (&) para unirlo;
- Caracteristicas VPR (VLOOKUP)para encontrar el código de la moneda que necesitamos en el directorio;
- Caracteristicas TEXTO (TEXTO), que convierte la fecha según el patrón dado día-mes-año a través de una barra inclinada.
="http://cbr.ru/scripts/XML_dynamic.asp?date_req1="&ТЕКСТ(B2;"ДД/ММ/ГГГГ")& "&date_req2="&ТЕКСТ(B3;"ДД/ММ/ГГГГ")&"&VAL_NM_RQ="&ВПР(B4;M:N;2;0)
Paso 2. Ejecutar la solicitud
Ahora usamos la función SERVICIO WEB (SERVICIO WEB) con la cadena de consulta generada como único argumento. La respuesta será una larga línea de código XML (es mejor activar el ajuste de línea y aumentar el tamaño de la celda si desea verlo completo):
Paso 3. Analizando la respuesta
Para facilitar la comprensión de la estructura de los datos de respuesta, es mejor utilizar uno de los analizadores XML en línea (por ejemplo, http://xpather.com/ o https://jsonformatter.org/xml-parser), que puede formatear visualmente el código XML, agregarle sangrías y resaltar la sintaxis con color. Entonces todo se volverá mucho más claro:
Ahora puede ver claramente que los valores del curso están enmarcados por nuestras etiquetas.
Para extraerlos, seleccione una columna de diez (o más, si se hace con un margen) celdas vacías en la hoja (porque se estableció un intervalo de fechas de 10 días) e ingrese la función en la barra de fórmulas FILTRO.XML (FILTRARXML):
Aquí, el primer argumento es un enlace a una celda con una respuesta del servidor (B8), y el segundo es una cadena de consulta en XPath, un lenguaje especial que se puede usar para acceder a los fragmentos de código XML necesarios y extraerlos. Puede leer más sobre el lenguaje XPath, por ejemplo, aquí.
Es importante que después de ingresar la fórmula, no presione Participary el atajo de teclado Ctrl+Shift+Participar, es decir, ingréselo como una fórmula matricial (las llaves que lo rodean se agregarán automáticamente). Si tiene la última versión de Office 365 con soporte para matrices dinámicas en Excel, entonces un simple Participar, y no necesita seleccionar celdas vacías por adelantado: la función en sí tomará tantas celdas como necesite.
Para extraer fechas, haremos lo mismo: seleccionaremos varias celdas vacías en la columna adyacente y usaremos la misma función, pero con una consulta XPath diferente, para obtener todos los valores de los atributos de fecha de las etiquetas de registro:
=FILTRO.XML(B8;”//Registro/@Fecha”)
Ahora, en el futuro, al cambiar las fechas en las celdas B2 y B3 originales o elegir una moneda diferente en la lista desplegable de la celda B3, nuestra consulta se actualizará automáticamente, remitiendo al servidor del Banco Central para obtener nuevos datos. Para forzar una actualización manualmente, también puede usar el atajo de teclado Ctrl+otro+F9.
- Importar tasa de bitcoin a Excel a través de Power Query
- Importe tipos de cambio de Internet en versiones anteriores de Excel