Актуальный курс валюты в LibreOffice

Быстрая заметка, чтобы в следующий раз не экспериментировать, о том как получать в онлайн курсы валют для рабочих расчётов.

Условие задачи

Имеется прайс в юанях, нужно сделать так, чтобы при открытии прайса видеть актуальную цену в рублях. Так же получить через рубль цену в евро. Евро является основной валютой для анализа и учёта.

  • Курсы валют будем получать с сайта Банк России: 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

Вот так всё и получается.