Использование веб-службы в Excel и развертывание одним файлом - PullRequest
2 голосов
/ 22 декабря 2010

Я хотел бы извлечь некоторые данные в свою электронную таблицу Excel (Excel 2007) из веб-службы, но я хотел бы развернуть электронную таблицу только в виде одного файла (например, spreadsheet.xlsx - больше ничего).

Без этого ограничения я использовал бы дополнения Visual Studio и записал бы его на C #, но это дало бы мне несколько дополнительных dll и vsto-файлов.

В более ранней версии Excel был Webservices Tolkit, но мои исследования показывают, что он не будет работать с 2007 года.

Есть ли какие-нибудь решения там? Я что-то слышал о библиотеке Microsoft Office Soap Type 3.0, но не знаю, как начать работать с ней.

Любая помощь / пример кода / другие решения будут оценены.

Ответы [ 3 ]

2 голосов
/ 27 декабря 2010

Я узнаю, как подключиться к веб-сервису с помощью библиотеки MS Office Soap Type в vba - поэтому никаких дополнительных файлов, только xls (x).На данный момент я знаю, как получить простые результаты типов данных (например, строки).Но я надеюсь, что смогу получить и работать с более сложными типами.

Вот код:

Dim webservice As SoapClient30
Dim results As String

' Point the SOAP API to the web service that we want to call...
Set webservice = New SoapClient30
Call webservice.mssoapinit(par_WSDLFile:="{url to wsdl}")

' Call the web service
results = webservice.{method name}()
Set webservice = Nothing

Необходимо добавить «Microsoft Office Soap Type Library v3.0"на ваши листы ссылок.

1 голос
/ 12 февраля 2014

Извините, что выкопал старую запись, но у меня недавно было подобное ограничение: все, что нужно было поместить в одну рабочую книгу, и я хочу опубликовать свое решение на случай, если у кого-то возникнет похожая проблема.Закончил писать свою собственную полностью-VBA библиотеку (в значительной степени основанную на одном из моих любимых, RestSharp).

Предупреждение, бесстыдный плагин: https://github.com/timhall/Excel-REST

Некоторые интересные функции включают аутентификацию (Http BasicOAuth1 и OAuth2 Client Credentials), поддержка Async и синтаксический анализ JSON (благодаря vba-json)

Он отлично работает в Excel 2010 (и, скорее всего, в 2007), но не работает в Excel для Mac из-заотсутствуют библиотеки XMLHTTP.Он работает с Salesforce, Trello, Basecamp, Google Maps, и он должен работать практически с любым веб-сервисом REST.

Пример:

Function GetDirections(Origin As String, Destination As String) As String
    ' Create a RestClient for executing requests
    ' and set a base url that all requests will be appended to
    Dim MapsClient As New RestClient
    MapsClient.BaseUrl = "https://maps.googleapis.com/maps/api/"

    ' Create a RestRequest for getting directions
    Dim DirectionsRequest As New RestRequest
    DirectionsRequest.Resource = "directions/{format}"
    DirectionsRequest.Method = httpGET

    ' Set the request format -> Sets {format} segment, content-types, and parses the response
    DirectionsRequest.Format = json

    ' (Alternatively, replace {format} segment directly)
    DirectionsRequest.AddUrlSegment "format", "json"

    ' Add parameters to the request (as querystring for GET calls and body otherwise)
    DirectionsRequest.AddParameter "origin", Origin
    DirectionsRequest.AddParameter "destination", Destination

    ' Force parameter as querystring for all requests
    DirectionsRequest.AddQuerystringParam "sensor", "false"

    ' => GET https://maps.../api/directions/json?origin=...&destination=...&sensor=false

    ' Execute the request and work with the response
    Dim Response As RestResponse
    Set Response = MapsClient.Execute(DirectionsRequest)

    If Response.StatusCode = 200 Then
        ' Work directly with parsed json data
        Dim Route As Object
        Set Route = Response.Data("routes")(1)("legs")(1)

        GetDirections = "It will take " & Route("duration")("text") & _
            " to travel " & Route("distance")("text") & _
            " from " & Route("start_address") & _
            " to " & Route("end_address")
    Else
        GetDirections = "Error: " & Response.Content
    End If
End Function
0 голосов
/ 22 декабря 2010
...