Страницы: 1
RSS
Импорт курсов валют с сайта nbrb.by, месяц меняется со днем
 
Добрый день. Наткнулся на любопытную тему: http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=24133
Собственно тема та же, мне тоже нужен импорт курсов валют с сайта nbrb.by
Наиболее привлекательный файл был выложен в посте №10, я убрал из него все лишнее, а именно оставил только курсы рб. Но в нем есть косяк непонятного мне происхождения.
Сегодня 12.05.2015, когда я запускаю обновить на экран выводятся данные с 1 января по 12 апреля 2015 года, но до марта дата выводится корректно, а в апреле месяц меняется местами со днем. То есть вместо 12.05.2015 в ячейке "А135" выводится значение 05.12.2015 (5 декабря 2015 года? ). При чем курсы отображаются корректно,едет только дата. Можно было бы все так и оставить, но ведь я буду потом подставлять курсы используя функцию =ВПР. Буду крайне признателен за помощь в данном вопросе!

P.S. Также буду благодарен, если кто-нибудь мне пояснит, как сместить данный диапазон на n строк вниз, чтобы он начинался скажем не с 4 строки а с 50ой?
Изменено: FusionBY - 13.05.2015 13:18:30
 
Цитата
с 1 января по 12 апреля 2015 года, но до марта дата выводится корректно
Не верю.Посмотрите внимательно ваш файл.
Замените-добавте
Код
        R_date = node_attr.Value ' дата
         CFormat = Split(R_date, "/")
        R_date = CFormat(1) & "." & CFormat(0) & "." & CFormat(2)
ActiveSheet.Cells(iIndex + 4, i)
4-это и есть номер строки вывода
 
Действительно, выводится все вперемешку :) До 10 числа неправильно после 10 числа правильно и пошло поехало. После баг-фикса все как нужно. Спасибо!
 
Добрый день! Хотел использовать готовое решение, но столкнулся с ошибкой. Не выгружает курсы по Евро и Росс рублю начиная с 07.01.2016. Посмотрел код, не смог найти из за чего происходит данная ошибка.
 
Код
 For iIndex = 0 To NodeList.Length - 1 'запускаем цикл по всем выбранным данным

этот ноделист для евро только 182 позиции.
Т.е. уже у банка нет данных, см.
http://www.nbrb.by/Services/XmlExRatesDyn.aspx?curId=19&fromDate=5.1.2016&toDate=9.22.2016
Изменено: Hugo - 22.09.2019 16:14:34
 
А как тогда вытягивать новые данные? И почему на данный момент выгружает USD НБРБ на текущие даты.
 
Там на сайте есть описание как это делать по-современному с API. xml они говорят устарело...
Но можно из xml  тянуть сегодняшний курс если что - такая страница выдаётся, значит с неё данные можно взять.
 
Такой запрос продолжает работать:
http://www.nbrb.by/services/xmlexrates.aspx?ondate=01/15/2019
Владимир
 
Но данные по xml отсутствуют по рублю и евро... а если делать по API надо вообще все переписать. Я знаю как с других сайтов вытянуть эти данные, но хотелось бы иметь дело с первоисточников. Похоже что по xml они поддержку данных валют убрали...
 
Есть там и рубли, и евро, по ссылке выше. Только даты меняйте...
Но код придётся всё равно переписывать.
Изменено: Hugo - 24.09.2019 20:50:25
 
Поменял даты, по ссылке которую Вы давали - за 2018 и 2019 вообще ничего не грузит. А вот по долларам выгружает (код = 145, вместо 19).
 
Ну по той ссылке ведь есть всё - задача это взять!
Но я пас, недосуг. Наверняка где-то уже всё написано...
 
Цитата
Hugo написал:
Ну по той ссылке ведь есть всё - задача это взять!
Согласен Игорь на все 100.
Надо коды поменять и с датой разобраться.
 
Т.е. как оказалось - с июля 2016 всего лишь поменялся код валют!
Вот затейники... и никому нигде ни слова :(
Изменено: Hugo - 25.09.2019 00:07:27
 
Цитата
Hugo написал:
Наверняка где-то уже всё написано...
вот тут, например
 
Не, там www.cbr.ru
 
но, все-таки код из моего поста по ссылке выглядит вот так
Код
Function НБРБ(Optional ByVal Curr$ = "USD", Optional ByVal dDate As Date) As Currency
    Dim ondate$
    With CreateObject("msxml.DOMDocument")
        ondate = "?ondate=" & Format(IIf(dDate, dDate, Date), "mm/dd/yyyy")
        .async = 0: .Load "http://www.nbrb.by/Services/XmlExRates.aspx" & ondate
        With .SelectSingleNode("*/Currency[CharCode='" & UCase(Curr) & "']")
            НБРБ = CCur(.ChildNodes(4).Text) / Val(.ChildNodes(2).Text)
        End With
    End With
End Function
 
Извиняюсь, не заметил под спойлером.
Но всё равно придётся корректировать код 6one - встраивать в цикл по датам. Но это уже не сложно.
 
вариант в PQ

Код
let
    fn = (CurAbbr,fromDate,toDate) => let
        fromDate   = Date.From(fromDate),
        toDate     = Date.From(toDate),
        Years      = Number.IntegerDivide(Duration.TotalDays(toDate - fromDate)-1,365)+1,
        Periods    = List.Transform(List.Dates(Date.From(fromDate), Years, #duration(365,0,0,0)),each "&fromDate="&Date.ToText(_,"MM.dd.yyyy")&"&toDate="&Date.ToText(List.Min({Date.AddYears(_,1),toDate}),"MM.dd.yyyy") ),
        Currencies = List.Select(Json.Document(Web.Contents("http://www.nbrb.by/API/ExRates/Currencies")), each [Cur_Abbreviation]=CurAbbr),
        fx=(Cur_ID)=>List.Transform(Periods,each try  Table.AddColumn(Xml.Tables(Web.Contents("http://www.nbrb.by/Services/XmlExRatesDyn.aspx?curId="&Text.From(Cur_ID)&_))[Record]{0},"Cur_ID",each Cur_ID) otherwise null),
        Rates      = List.RemoveNulls(List.Combine(List.Transform(Currencies,each fx([Cur_ID])))),
        Expand     = Table.ExpandTableColumn(Table.FromColumns({Rates}), "Column1", {"Rate", "Attribute:Date","Cur_ID"}, {"Курс", "Дата","Cur_ID"}),
        Transform  = Table.ReplaceValue(Expand,null,null,(a,b,c)=>try Number.From(Text.Replace(a,".",",")) otherwise Date.From(a,"en-us"),{"Курс","Дата"})
    in Table.TransformColumnTypes(Transform,{{"Курс",type number},{"Дата", type date}}),
    EuroRatesDyn = fn("EUR","01.01.2013","22.09.2019")
in
    EuroRatesDyn
 
Добрый день.
Ребята помогите пожалуйста. Очень нужна ваша помощь.
К сожалению я не программист и макросы писать не умею.
В ячейке R1C10 прописан текущий курс рубля РФ. Каждый день меняю его вручную.
Если не сложно, подскажите пожалуйста, что нужно сделать, что бы подтягивался курс при загрузке файла автоматически.
Благодарю!
 
AndreiSMT, например, в Power Query
 
artyrH, спасибо вам большое! Вы гений!
Вот, только знать бы еще последовательность ваших действий.
Если не разберусь, буду перекидывать всю таблицу в ваш файлик.
Еще раз благодарю за помощь!
 
будут проблемы - пишите
 
я тоже не программист. Даже не знаю, в каком формате отдает это НацБанк, наверное по API . С xml пока не разобрался,
Вот все валюты НБ РБ, 78 шт
У меня формула вида :  
Код
=ПСТР(ВЕБСЛУЖБА(https://www.nbrb.by/api/exrates/rates/"&$C$5&"?ondate="&
ГОД($B6)&"-"&МЕСЯЦ($B6)&"-"&ДЕНЬ($B6)&"¶mmode=2");120+6;6)
¶mmode=2  это      (& parammode=2) без скобок и пробелов

красивее  конечно   ТЕКСТ($B6;"ГГГГ-ММ-ДД")

вместо $С$5 -- писать по-человечески -- "USD", "EUR", "RUB" (вместе с кавычками) или ставить в ячейу С5 (без кавычек),  
дата В6 дата в любом формате, главное формат ячейки вида 01.01.2022 (без * )

я уже сделал версию запроса и по  XML  по  инструкции  Николая

https://www.planetaexcel.ru/techniques/13/20011/#00#11731

https://share.multcloud.link/share/8429fae1-b4a6-4ed0-9105-1cd54b4e8fd5
это облако, если я еще что придумаю, вы увидите последнюю версию.
Изменено: seregas - 08.02.2022 23:36:23
 
а вот еще вопрос:  Странное поведение НацБанка Беларуси . Он отдает дату в неполиткорректном формате "ММ-ДД-ГГГГ".

Но мало того что все перевернуто, он еще и умудряется посередине месяца менять формат даты с "ММ-ДД-ГГГГ" на "ММ/ДД/ГГГГ"   и потом назад. И все без разрешения и всякой логики. У банка там на сервере ошибки в базе данных , мы это получаем, и исправить нельзя.
Но мы знаем функцию   ТЕКСТ($B6;"ГГГГ-ММ-ДД") , которая преобразует любую дату к нужной текстовой строке. И эта крайне полезная функция не различает дату, где там ДЕНЬ, где там МЕСЯЦ.  А вот функции  ДЕНЬ(), где там МЕСЯЦ() и  ГОД()  различать обязаны.
Получается, что при ответе банка по API передается информация по структуре даты подробно, где ДЕНЬ , где МЕСЯЦ.  А вот по XML  я сомневаюсь, что в этом длинном текстовом потоке (разрешается одним запросом формировать ответ длинною в год) есть информация по структуре даты.

Как привести ответ банка (в части даты) к человеческому виду ?
Изменено: seregas - 09.02.2022 00:27:21
 
доброго времени суток,
Цитата
написал:
умудряется посередине месяца менять формат даты с "ММ-ДД-ГГГГ" на "ММ/ДД/ГГГГ"   и потом назад. И все без разрешения и всякой логики
не замечал такого поведения: последние лет 5 они хранят дату в формате "2022-01-01T00:00:00" - и кривенько написанный пять лет назад запрос пока не падает.
Коды валют иногда меняются.

Дарю рабочий файлик с импортом котировок из API nbrb.by с помощью PowerQuery.
Ссылка на архив 2016-2021: https://drive.google.com/file/d/1MCzJwRpjMJIyAZskMS81itaKiJConDC1/view?usp=sharing

архив распаковать в папку с файлом
Изменено: genosser - 09.02.2022 09:50:18
 
,  благодарствую. Вообще про XML только здесь понял, как это просто , удобно и какие огромные возможности. Вот , сегодня узнал , что  PowerQuery это надстройка к Excel , а не что-то самостоятельное и не нужное  -- тоже не плохо. Последней стадией моего развития на planetaexcel.ru  должен стать Visual Basic , но похоже, не в этой жизни :)
 
Приветствую. Появилась необходимость получения курсов НБ РБ в excel на определенную дату в автоматическом режиме, почитал ветку. Пишу в ячейке функцию =ВЕБСЛУЖБА("ссылка с сайта нбрб") получаю ошибку #ЗНАЧ! причем если эту ссылку ввести в браузер она срабатывает и показывает данные. Прошу помощи что не так?
 
Мак Сим, уже месяц прошел. Я тоже долго бился с этим НацБанком РБ. Вроде победил. Тоже читал эта тему, как видно выше.
в соседней теме про "Сравнение дат" есть файл. И там все виды импорта из этого банка. Вроде, JSON нет.
Может, будет полезно.

там на листе с XML какая то ошибка плавающая. Когда в середине массива есть правильный курс, а весь массив выдает ошибку. Хотя такого в принципе быть не может. Массив либо работает весь на 365 строк, либо нет.
и раньше он прекрасно поработал , т.к. ошибиться  в 1 операторе сложно.
Пока я обхожусь и без этого  XML.
Страницы: 1
Наверх