【问题标题】:Call web service in excel在excel中调用web服务
【发布时间】:2010-10-03 06:16:21
【问题描述】:

在 excel 2007 的 VBA 模块中,是否可以调用 Web 服务?如果是这样,任何代码sn-ps?如何添加网络参考?

【问题讨论】:

  • 我知道这是可能的,因为我曾经参与过一个这样做的项目。不幸的是,我只在 Web 服务部分工作,并且有太多事情要做,无法探索 Excel 代码。我会尝试找出如何。这是可能的。
  • 您可能会发现这很有用:stackoverflow.com/questions/3521876/…

标签: vba excel web-services office-2007


【解决方案1】:

是的,你可以!

我从事的项目就是这样做的(见评论)。不幸的是,没有代码示例,但谷歌搜索显示了这些:

How you can integrate data from several Web services using Excel and VBA

STEP BY STEP: Consuming Web Services through VBA (Excel or Word)

VBA: Consume Soap Web Services

【讨论】:

  • 以防万一有人想知道:不,这在相当新的 Excel 版本上不可用。 :(
  • 如果有人想知道,Web 服务调用是 VBA 的一部分,它在最近的版本中可用,它是 Excel 开发套件的一部分,默认隐藏。它仍然很恶心,并且大多数链接在@Mostlyharmless 最初评论时已经有 10 年的历史了。
【解决方案2】:

这是来自 MS 的概述:

Consuming Web Services in Excel 2007

【讨论】:

  • 该问题未指定正在使用哪个版本的 excel。但是,VBA 在 2007 年被弃用,您的方法是正确的。
【解决方案3】:

有关更新的答案,请参阅此 SO 问题:

calling web service using VBA code in excel 2010

这两个线程应该合并。

【讨论】:

    【解决方案4】:

    在 Microsoft Excel Office 2007 中尝试安装“Web 服务参考工具”插件。并使用 WSDL 并添加 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
    

    【讨论】:

      【解决方案5】:

      Excel 2013 从 Web 服务读取数据并 bash 处理 JSON,直到您可以从中获取所需内容(假设 JSON 始终采用相同格式)。

      此代码无需任何插件即可运行。

      不过,您将需要来自 currency converter 网站的免费 API 密钥。

      我用它来将 USD 到 GBP 的值加载到我工作表上的一个单元格中。

      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
      

      【讨论】:

        猜你喜欢
        • 2012-05-28
        • 1970-01-01
        • 2014-08-23
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多