在 excel 2007 的 VBA 模块中,是否可以调用 Web 服务?如果是这样,任何代码片段?我将如何添加网络参考?
Jeremy
问问题
121671 次
5 回答
25
是的你可以!
我参与了一个这样做的项目(见评论)。不幸的是,没有来自那个的代码示例,但谷歌搜索显示了这些:
如何使用 Excel 和 VBA 集成来自多个 Web 服务的数据
于 2009-01-23T22:53:50.937 回答
6
以下是 MS 的概述:
于 2010-01-29T21:05:04.643 回答
3
于 2012-06-25T09:39:24.973 回答
1
在 Microsoft Excel Office 2007 中尝试安装“Web 服务参考工具”插件。并使用 WSDL 并添加 Web 服务。并在模块中使用以下代码从 Web 服务中获取必要的数据。
Sub Demo()
Dim XDoc As MSXML2.DOMDocument
Dim xEmpDetails As MSXML2.IXMLDOMNode
Dim xParent As MSXML2.IXMLDOMNode
Dim xChild As MSXML2.IXMLDOMNode
Dim query As String
Dim Col, Row As Integer
Dim objWS As New clsws_GlobalWeather
Set XDoc = New MSXML2.DOMDocument
XDoc.async = False
XDoc.validateOnParse = False
query = objWS.wsm_GetCitiesByCountry("india")
If Not XDoc.LoadXML(query) Then 'strXML is the string with XML'
Err.Raise XDoc.parseError.ErrorCode, , XDoc.parseError.reason
End If
XDoc.LoadXML (query)
Set xEmpDetails = XDoc.DocumentElement
Set xParent = xEmpDetails.FirstChild
Worksheets("Sheet3").Cells(1, 1).Value = "Country"
Worksheets("Sheet3").Cells(1, 1).Interior.Color = RGB(65, 105, 225)
Worksheets("Sheet3").Cells(1, 2).Value = "City"
Worksheets("Sheet3").Cells(1, 2).Interior.Color = RGB(65, 105, 225)
Row = 2
Col = 1
For Each xParent In xEmpDetails.ChildNodes
For Each xChild In xParent.ChildNodes
Worksheets("Sheet3").Cells(Row, Col).Value = xChild.Text
Col = Col + 1
Next xChild
Row = Row + 1
Col = 1
Next xParent
End Sub
于 2015-09-14T12:42:38.373 回答
0
Excel 2013 从 Web 服务读取数据并 bash 直到您可以从中获得所需的内容(假设 JSON 将始终采用相同的格式)。
这段代码应该可以在不需要任何插件的情况下工作。
不过,您将需要来自货币转换器网站的免费 API 密钥。
我用它将美元到英镑的值加载到我工作表上的一个单元格中。
Option Explicit
Sub Test_LateBinding()
Dim objRequest As Object
Dim strUrl As String
Dim blnAsync As Boolean
Dim strResponse As String
Set objRequest = CreateObject("MSXML2.XMLHTTP")
strUrl = "https://free.currconv.com/api/v7/convert?q=USD_GBP&compact=ultra&apiKey=[MY_API_KEY]"
blnAsync = True
With objRequest
.Open "GET", strUrl, blnAsync
.SetRequestHeader "Content-Type", "application/json"
.Send
While objRequest.readyState <> 4
DoEvents
Wend
strResponse = .responsetext
End With
Dim responseArray() As String
responseArray = Split(strResponse, ":", -1)
Dim value As String
value = responseArray(1)
Dim valueArray() As String
valueArray = Split(value, "}", -1)
Dim finalValue As String
finalValue = valueArray(0)
Sheet2.Cells(22, "C") = finalValue
End Sub
于 2021-07-30T05:21:01.227 回答