PSD
Главный специалист
Offline
Пол:
|
|
« : 27-08-2012 09:41 » |
|
Задача: создать в документе MS Excel кнопку , которая будет брать из ячеек некоторые параметры подставлять их в запрос к Web-сервису , принимать ответ и раскладывать полученный XML в лист. Упрощенно задачу можно сформулировать как "запрос курса валюты" , те взять из ячейки идентификатор валюты "USD", "RUR" ... и дату , результат положить в определенную ячейку листа. Сразу хочу сказать, что про курс валют это условный пример, реальная задача глубоко специфическая... Мне нужно разобраться как это делается в принципе , какие либы и какие объекты нужно подцепить и как их использовать. В лоб гугля почему то дает отдельно работу с сервисами и отдельно VBA, так как про web-сервисы я знают только что они типа есть. Самостоятельно трансформировать набор XML из этих статей в конкретные конструкции VBA : Подключение к серверу, Вызов сервиса ,Получение результата, Разбор результата пока не получается. Буду очень признателен за помощь.
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #1 : 27-08-2012 13:35 » |
|
PSD, работа с web-сервисами происходит по протоколу SOAP (обычно поверх HTTP), сам сервис описывается при помощи языка WSDL. Обмен данными производится в формате XML. VBA ни с тем, ни с другим работать не умеет. VBA работает с COM-объектами, которые умеют это делать. Если COM-объект работы с XML широко используется, и примеров в интернете масса, то с COM-объектом клиента для SOAP+WSDL я лично не сталкивался. Наверно, есть что-то. Ищи по перечисленным ключевым аббревиатурам.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
zubr
Гость
|
|
« Ответ #2 : 27-08-2012 14:28 » |
|
Я в VBA не знаток, но вроде с WinAPI VBA умеет работать. Если так, то можно отправлять-принимать запросы-ответы, используя WinInet-функции.
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #3 : 27-08-2012 15:07 » |
|
zubr, не, вручную SOAP реализовать - тухлое дело.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sla
|
|
« Ответ #4 : 27-08-2012 15:45 » |
|
хм... Что-то вы усложняете... CreateObject("MSXML2.XMLHTTP")
может быть... ActiveX-компонент WebBrowser
Что понимать под web-сервисом?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #5 : 27-08-2012 18:47 » |
|
Sla, XmlHttp лишь позволит создать работать по HTTP, а надо SOAP.
Проблема в том, что веб-сервисы и DCOM/COM+ в некотором смысле конкуренты как технологии для RPC. Ясен пень, Microsoft не горела желанием делать поддержку первого. Сейчас в .NET, конечно, поддержка есть и полноценная. Но COM - более старая технология, и не уверен, что есть системный объект, осуществляющий такую поддержку. Впрочем, некоторые .NET компоненты опубликованы как COM - можно где-то там поискать.
Интернеты говорят, что есть такой COM-ник в природе. MSSOAP.SoapClient30. Смотреть надо SOAP Toolkit от Microsoft (30 означает версию 3.0 - может другие есть).
|
|
« Последнее редактирование: 28-08-2012 07:39 от Dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #6 : 28-08-2012 04:05 » |
|
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Sla
|
|
« Ответ #7 : 28-08-2012 11:58 » |
|
Я не могу понять, откуда вы взяли, что нужен SOAP? Или только из слов: web-сервис? То что web-сервис отдает XML, это ведь не значит, что он поддерживает SOAP в смысле его синтаксиса <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header> ... </soap:Header>
<soap:Body> ... <soap:Fault> ... </soap:Fault> </soap:Body>
</soap:Envelope>
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #8 : 28-08-2012 13:05 » |
|
Sla, да, только из слова "веб-сервис". О чём спрошено, то и отвечено.
И если некое сетевое приложение отдаёт XML и не понимает SOAP, то это не веб-сервис, а просто сетевое приложение. Может даже веб-приложение.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Sla
|
|
« Ответ #9 : 28-08-2012 13:27 » |
|
Dimka, согласен. А что скажет ТС?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|