在Excel 2010中使用VBA代码调用WCF服务

时间:2017-06-06 08:56:18

标签: excel-vba web-services vba excel

我正在尝试从Excel 2010中的VBA调用XML中的ASP.Net WCF服务。

我读到了这个问题: calling web service using VBA code in excel 2010 但我不能使用第三方库,XML或JSON。

有没有办法在VBA使用网络服务的情况下原生

修改 我已经安装了 SOAP Toolkit 3.0 SOAP Toolkit 3.0软件更新

我已将这些库添加到我的工作簿中:

  • Microsoft XML,v3.0
  • Microsoft Soap Type Library v3.0
  • WinHttp肥皂连接器类型库
  • WinInet肥皂连接器类型库
  • Microsoft Soap WSDL File Generator v3.0

我想我必须通过“工具 - >添加网络参考”菜单将我的服务的网络引用添加到我的工作簿中,但是此选项不会出现。我该怎么做才能看到它?

2 个答案:

答案 0 :(得分:1)

这是一个使用Microsoft XML 3.0库从Web服务获取数据的示例例程:

Sub DoIt()
    Dim sURL As String
    Dim sEnv As String
    Dim xmlHtp As New MSXML2.XMLHTTP
    Dim xmlDoc As New DOMDocument
    Dim oValueNodes As MSXML2.IXMLDOMNodeList
    sURL = "http://webservices.gama-system.com/exchangerates.asmx?op=CurrentConvertToEUR"

    sEnv = "<?xml version=""1.0"" encoding=""utf-8""?>"
    sEnv = sEnv & "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"
    sEnv = sEnv & "  <soap:Body>"
    sEnv = sEnv & "    <CurrentConvertToEUR xmlns=""http://www.gama-system.com/webservices"">"
    sEnv = sEnv & "      <dcmValue>100</dcmValue>"
    sEnv = sEnv & "      <strBank>BS</strBank>"
    sEnv = sEnv & "      <strCurrency>USD</strCurrency>"
    sEnv = sEnv & "      <intRank>1</intRank>"
    sEnv = sEnv & "    </CurrentConvertToEUR>"
    sEnv = sEnv & "  </soap:Body>"
    sEnv = sEnv & "</soap:Envelope>"

    With xmlHtp
        .Open "post", sURL, False
        .setRequestHeader "Host", "webservices.gama-system.com"
        .setRequestHeader "Content-Type", "text/xml; charset=utf-8"
        .setRequestHeader "soapAction", "http://www.gama-system.com/webservices/CurrentConvertToEUR"
        .send sEnv
        xmlDoc.loadXML .responseText
        Set oValueNodes = xmlDoc.getElementsByTagName("CurrentConvertToEURResponse")
        MsgBox oValueNodes.Item(0).nodeTypedValue
    End With
     'xmlDoc.Save ThisWorkbook.Path & "\WebQueryResult.xml"
End Sub

您需要的关键是Web服务期望的SOAP信封的确切结构。

答案 1 :(得分:0)

我找到了useful post来处理这个问题。

Web Service Software Factory 2010未得到维护,似乎已过时。