Страницы: 1
RSS
XML запрос на VBA
 
Господа, подскажите, никак не могу найти, всё не то или слишком сложнаааа.
Есть формулы на листе:

Ячейка А1 ="Иванов" - Любая фамилия
Ячейка А2 =КОДИР.URL(A1) - Изменение кодировки
Ячейка А3 =ВЕБСЛУЖБА("http://api.morpher.ru/WebService.asmx/GetXml?s="&A2) - XML запрос
Ячейка А4 =ФИЛЬТР.XML(A3;"/xml/Р") - выборка нужного из XML ответа (фамилия в родительном падеже)
или короче:
Ячейка А2 =ФИЛЬТР.XML(ВЕБСЛУЖБА("http://api.morpher.ru/WebService.asmx/GetXml?s="&КОДИР.URL(A1));"/xml/Р") - все что сверху, но одной строкой

Как сделать все тоже самое (желательно короткий вариант) на VBA?
Изменено: Slenk - 27.09.2016 16:15:53
 
Slenk, интересный сервис, спасибо за ссылку :)
А по теме, это пользовательские функции, нужно писать код для каждой функции.
 
Вот здесь внизу статьи есть пример: Получить курс валют от ЦБР
если сайт возвращает XML и Вы знакомы с XPath - то проблем не будет. Кстати, на VBA XPath работает лучше, чем в функции. Пробовал реализовать в точности тоже, что по ссылке выше в офисе 365 - не получилось, ошибку разбора выдает, хотя все верно. Надо проверить на последних обновлениях офиса.
Изменено: The_Prist - 27.09.2016 16:37:27
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, спасибо, попробую разобраться.
Jungl, сервис отличный, да. Сам был в восторге, когда нашел)
 
Вам что, только ФИО надо склонять?

у меня есть макрофункция для склонения (родительный и дательный падежи)
http://excelvba.ru/code/DativeCase
http://excelvba.ru/code/GenitiveCase
(для других падежей код не выкладывал, но есть еще винительный и творительный)
 
Игорь,ухты, а я ранее искал и не нашел бесплатного "офлайн" варианта. Да, для текущей задачи мне нужна только фамилия в родительном падеже (в имени и отчестве используются лишь инициалы). Спасибо, попробую этот вариант.
 
Итак, я честно прочел приведенный пример и еще тонну всего помимо примера. Но воз и ныне там. Может кто-нибудь написать какой командой это делается или дать ссылку на "учебник", не пример, где надо все переделать чуть более, чем полностью, а именно учебник.

Повторю вопрос:
в теле макроса (не надо никаких функций) нужно сделать XML запрос сюда: http://api.morpher.ru/WebService.asmx/GetXml?s=Иванов

в ответе получается вот это:
Код
<xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://morpher.ru/">
<Р>Иванова</Р>
<Д>Иванову</Д>
<В>Иванова</В>
<Т>Ивановым</Т>
<П>Иванове</П>
<ФИО>
<Ф>Иванов</Ф>
<И/>
<О/>
</ФИО>
</xml>
из этого ответа получить то, что между <Р> и </Р>, то есть "Иванова" и присвоить это значение переменной. Всё.

Очень надеюсь на помощь тут или ссылку на адекватный учебник по работе с XML в VBA
 
вот получили вы ответ сайта в текстовую переменную txt
далее:
1) убираем слеши в тегах:
Код
txt = replace(txt, "</","<")
2) ищем любое значение функцией SPLIT
Код
Дательный = split(txt, "<Д>")(1)
Винительный = split(txt, "<В>")(1)
Фамилия = split(txt, "<Ф>")(1)
 
Можно так.
Код
Sub GOOOOOOOOO()
s = GetРодительный("http://api.morpher.ru/WebService.asmx/GetXml?s=%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2")
End Sub
Function GetРодительный(ByVal sURL As String) As String
    On Error Resume Next
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    With oXMLHTTP
        .Open "GET", sURL, False
       .send
      GetРодительный = .responseXML.SelectSingleNode("//Р").Text
    End With
     Set oXMLHTTP = Nothing
End Function
 
Doober,супер, работает именно так, как должно! Спасибо!
Страницы: 1
Читают тему
Наверх