我正在尝试从Excel 2010中的VBA拨打XML中的ASP.NET WCF服务。
我读了这个问题:使用Excel 2010中使用VBA代码调用Web服务但是我不能使用第三方库,XML或JSON。
有没有一种方法本地使用VBA使用Web Services?
编辑我已经安装了肥皂工具包3.0 和肥皂工具包3.0软件更新。
我已经将这些库添加到我的工作簿中:
- Microsoft XML,v3.0
- Microsoft SOAP类型库v3.0
- winhttp肥皂连接器类型库
- Wininet肥皂连接器类型库
- Microsoft SOAP WSDL文件生成器v3.0
我认为我必须通过" Tools->添加Web Reference"菜单将网络参考添加到我的工作簿中,但是此选项不会出现。我应该怎么看?
这是一个示例例程,使用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服务所期望的肥皂信封的确切结构。
我发现了一个有用的文章。
Web Service软件工厂2010年没有维护,似乎已经过时了。