Быстрая заметка, чтобы в следующий раз не экспериментировать, о том как получать в онлайн курсы валют для рабочих расчётов.
Условие задачи
Имеется прайс в юанях, нужно сделать так, чтобы при открытии прайса видеть актуальную цену в рублях. Так же получить через рубль цену в евро. Евро является основной валютой для анализа и учёта.
- Курсы валют будем получать с сайта Банк России: https://cbr.ru/development/sxml/
- А конкретно из xml-файла: https://cbr.ru/scripts/XML_daily.asp
Формула в два шага:
(1) Импортируем xml-файл, в ячейку $A$1 впишем формулу:
=WEBSERVICE("https://cbr.ru/scripts/XML_daily.asp")
(2) Выбираем нужное из полученного xml, из ячейки $A$1:
=FILTERXML($A$1;"//ValCurs//Valute[@ID='R01375']/Value")
Результирующая формула:
=FILTERXML(WEBSERVICE("https://cbr.ru/scripts/XML_daily.asp");"//ValCurs//Valute[@ID='R01375']/Value")
Как работает FILTERXML
Заглянем глазками в xml-файл, всё равно надо в нём найти какой ID у требуемой валюты, и так смотрим. Ищем «EUR», находим и видим следующее (я специально убрал лишние валюты, их там много, оставил нужное и сохранил структуру):
<ValCurs Date="16.02.2024" name="Foreign Currency Market"> <Valute ID="R01239"> <NumCode>978</NumCode> <CharCode>EUR</CharCode> <Nominal>1</Nominal> <Name>Евро</Name> <Value>98,4099</Value> <VunitRate>98,4099</VunitRate> </Valute> <Valute ID="R01375"> <NumCode>156</NumCode> <CharCode>CNY</CharCode> <Nominal>1</Nominal> <Name>Китайский юань</Name> <Value>12,6566</Value> <VunitRate>12,6566</VunitRate> </Valute> </ValCurs>
И надо передать структуру в формулу, а также поисковый индекс, именно того, что мы ищем:
//ValCurs//Valute[@ID='R01239']/Value
Вот так всё и получается.