Актуализиран обменен курс в Excel

Многократно съм анализирал начини за импортиране на данни в Excel от Интернет с последващо автоматично актуализиране. По-специално:

  • В по-старите версии на Excel 2007-2013 това може да стане с директна уеб заявка.
  • От 2010 г. това може да се направи много удобно с добавката Power Query.

Към тези методи в последните версии на Microsoft Excel вече можете да добавите още един – импортиране на данни от интернет в XML формат с помощта на вградени функции.

XML (eXtensible Markup Language = Extensible Markup Language) е универсален език, предназначен да описва всякакъв вид данни. Всъщност това е обикновен текст, но със специални тагове, добавени към него, за да се маркира структурата на данните. Много сайтове предоставят безплатни потоци от своите данни в XML формат за изтегляне от всеки. На уебсайта на Централната банка на нашата страна (www.cbr.ru), по-специално, с помощта на подобна технология се дават данни за обменните курсове на различни валути. От уебсайта на Московската борса (www.moex.com) можете да изтеглите котировки за акции, облигации и много друга полезна информация по същия начин.

От версия 2013 Excel има две функции за директно зареждане на XML данни от интернет в клетки на работен лист: УЕБ СЕРВИЗ (УЕБ СЕРВИЗ) и FILTER.XML (FILTERXML). Те работят по двойки – първо функцията УЕБ СЕРВИЗ изпълнява заявка до желания сайт и връща отговора си в XML формат, след което използва функцията FILTER.XML ние „анализираме“ този отговор на компоненти, извличайки данните, от които се нуждаем.

Нека разгледаме работата на тези функции, като използваме класически пример – импортиране на обменния курс на всяка валута, от която се нуждаем за даден интервал от дата, от уебсайта на Централната банка на нашата страна. Ще използваме следната конструкция като заготовка:

Актуализиран обменен курс в Excel

Тук:

  • Жълтите клетки съдържат началната и крайната дата на периода, който ни интересува.
  • Синята има падащ списък с валути, използващи командата Данни – Валидиране – Списък (Данни — Валидиране — Списък).
  • В зелените клетки ще използваме нашите функции, за да създадем низ за заявка и да получим отговора на сървъра.
  • Таблицата вдясно е препратка към валутните кодове (ще ни трябва малко по-късно).

Да тръгваме!

Стъпка 1. Формиране на низ за заявка

За да получите необходимата информация от сайта, трябва да я зададете правилно. Отиваме на www.cbr.ru и отваряме връзката в долния колонтитул на главната страница" Технически ресурси'- Получаване на данни чрез XML (http://cbr.ru/development/SXML/). Превъртаме малко по-надолу и във втория пример (Пример 2) ще има това, от което се нуждаем – получаване на обменните курсове за даден интервал от дати:

Актуализиран обменен курс в Excel

Както можете да видите от примера, низът на заявката трябва да съдържа начални дати (дата_req1) и окончания (дата_req2) на интересуващия ни период и кода на валутата (VAL_NM_RQ), скоростта, която искаме да получим. Можете да намерите кодовете на основните валути в таблицата по-долу:

Валута

код

                         

Валута

код

Австралийски долар R01010

Литовски литас

R01435

австрийски шилинг

R01015

литовски купон

R01435

Азербайджански манат

R01020

Молдовската лея

R01500

Лира

R01035

РќРµРјРµС † РєР ° СЏ РјР ° СЂРєР °

R01510

анголска нова кванза

R01040

холандски гулден

R01523

Арменски драм

R01060

норвежка крона

R01535

Белоруска рубла

R01090

полската злота

R01565

белгийски франк

R01095

португалско ескудо

R01570

Българският лъв

R01100

Румънска лея

R01585

Бразилски реал

R01115

Сингапурски долар

R01625

Унгарския форинт

R01135

Суринамски долар

R01665

Хонг Конг долар

R01200

таджикски сомони

R01670

гръцка драхма

R01205

таджикска рубла

R01670

Датска крона

R01215

Турска лира

R01700

американски долар

R01235

Туркменски манат

R01710

евро

R01239

Нов туркменски манат

R01710

Индийски рупии

R01270

узбекска сума

R01717

ирландски паунд

R01305

Украинската гривна

R01720

исландска крона

R01310

Украински карбованци

R01720

испанска песета

R01315

финландска марка

R01740

италианска лира

R01325

френски франк

R01750

казахстанско тенге

R01335

Чешка крона

R01760

канадски долар

R01350

Шведска крона

R01770

киргизки сом

R01370

швейцарски франк

R01775

Китайски юан

R01375

естонска крона

R01795

Кувейтски динар

R01390

Югославски нов динар

R01804

латвийски лат

R01405

Южноафрикански ранд

R01810

Ливанска лира

R01420

Република Корея спечели

R01815

японската йена

R01820

Пълно ръководство за валутните кодове също е достъпно на уебсайта на Централната банка – вижте http://cbr.ru/scripts/XML_val.asp?d=0

Сега ще формираме низ за заявка в клетка на лист с:

  • операторът за конкатенация на текст (&), за да го сглобите;
  • Характеристики: ВПР (VLOOKUP)да намерим кода на необходимата ни валута в директорията;
  • Характеристики: ТЕКСТ (ТЕКСТ), който преобразува датата според зададения модел ден-месец-година чрез наклонена черта.

Актуализиран обменен курс в Excel

="http://cbr.ru/scripts/XML_dynamic.asp?date_req1="&ТЕКСТ(B2;"ДД/ММ/ГГГГ")&  "&date_req2="&ТЕКСТ(B3;"ДД/ММ/ГГГГ")&"&VAL_NM_RQ="&ВПР(B4;M:N;2;0)  

Стъпка 2. Изпълнете заявката

Сега използваме функцията УЕБ СЕРВИЗ (УЕБ СЕРВИЗ) с генерирания низ на заявката като единствен аргумент. Отговорът ще бъде дълъг ред XML код (по-добре е да включите пренасянето на думи и да увеличите размера на клетката, ако искате да я видите цялата):

Актуализиран обменен курс в Excel

Стъпка 3. Разбор на отговора

За да улесните разбирането на структурата на данните за отговора, по-добре е да използвате един от онлайн анализаторите на XML (например http://xpather.com/ или https://jsonformatter.org/xml-parser), който може визуално да форматира XML код, като добавя отстъпи към него и подчертава синтаксиса с цвят. Тогава всичко ще стане много по-ясно:

Актуализиран обменен курс в Excel

Сега можете ясно да видите, че стойностите на курса са рамкирани от нашите тагове ..., а датите са атрибути Дата в тагове .

За да ги извлечете, изберете колона от десет (или повече – ако сте направили с поле) празни клетки на листа (тъй като е зададен 10-дневен интервал от дата) и въведете функцията в лентата за формули FILTER.XML (ФИЛТРИРАНЕXML):

Актуализиран обменен курс в Excel

Тук първият аргумент е връзка към клетка с отговор на сървъра (B8), а вторият е низ на заявка в XPath, специален език, който може да се използва за достъп до необходимите фрагменти от XML код и тяхното извличане. Можете да прочетете повече за езика XPath например тук.

Важно е след като въведете формулата, да не натискате Въведетеи клавишната комбинация Ctrl+Превключване+Въведете, т.е. въведете го като формула за масив (къдравите скоби около него ще бъдат добавени автоматично). Ако имате най-новата версия на Office 365 с поддръжка за динамични масиви в Excel, тогава просто Въведете, и не е необходимо да избирате празни клетки предварително – самата функция ще вземе толкова клетки, колкото са ѝ необходими.

За да извлечем дати, ще направим същото – ще изберем няколко празни клетки в съседната колона и ще използваме същата функция, но с различна XPath заявка, за да получим всички стойности на атрибутите Date от таговете Record:

=FILTER.XML(B8;”//Запис/@Дата”)

Сега в бъдеще, когато промените датите в оригиналните клетки B2 и B3 или изберете различна валута в падащия списък на клетка B3, нашата заявка ще се актуализира автоматично, препращайки към сървъра на Централната банка за нови данни. За да принудите актуализация ръчно, можете допълнително да използвате клавишната комбинация Ctrl+Друг+F9.

  • Импортирайте курса на биткойн в Excel чрез Power Query
  • Импортирайте обменни курсове от интернет в по-стари версии на Excel

Оставете коментар