如何通过VBA将某些XML数据读入Excel

如何通过VBA将某些XML数据读入Excel,xml,vba,excel,xml-parsing,Xml,Vba,Excel,Xml Parsing,我从GoogleMapDistanceMatrix API中获得了一个XML响应文本,我必须将其读入Excel或从XML响应文本中输出某些信息。我只需要中的值、持续时间中的值和距离中的值 这是我的VBA代码: Sub Button1_Click() Dim x As Long, y As Long Dim htm As Object Dim wb As Workbook Dim ws As Worksheet Dim TxtRng As Range Dim num1 As String S

我从GoogleMapDistanceMatrix API中获得了一个XML响应文本,我必须将其读入Excel或从XML响应文本中输出某些信息。我只需要
中的值、持续时间中的
值和距离中的

这是我的VBA代码:

Sub Button1_Click()
Dim x As Long, y As Long
Dim htm As Object
Dim wb As Workbook
Dim ws As Worksheet
Dim TxtRng  As Range

Dim num1 As String

Set wb = ActiveWorkbook
Set ws = wb.Sheets("Sheet1")

Set htm = CreateObject("htmlFile")
num1 = Cells(2, 2).Value

With CreateObject("msxml2.xmlhttp")
    .Open "GET", "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=sy8 2jp&destinations=" & num1 & "&mode=driving&language=en-GB&v=3&sensor=false&units=imperial", False
    .send
    htm.body.innerHTML = .responseText
    Debug.Print .responseText (don't know how to debug print certain value)

    MSGbox (.responseText)(or strip out certain value of response text)
End With

End Sub
这是我的调试打印响应文本

 <status>OK</status>
 <origin_address UK</origin_address>
 <destination_address>UK</destination_address>
 <row>
  <element>
    <status>OK</status>
      <duration>
      <value>622</value>
      <text>10 mins</text>
      </duration>
   <distance>
     <value>8552</value>
     <text>5.3 mi</text>
   </distance>
 </element>
</row>
</DistanceMatrixResponse>
OK

在VBA中添加对“MicrosoftXML,v3.0”的引用后,可以使用以下内容:

Sub GetSingleNodes()
    Dim objXML As MSXML2.DOMDocument
    Dim strXML As String
    Set objXML = New MSXML2.DOMDocument

    Set htm = CreateObject("htmlFile")
    num1 = Cells(2, 2).Value
    With CreateObject("msxml2.xmlhttp")
        .Open "GET", "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=sy8 2jp&destinations=" & num1 & "&mode=driving&language=en-GB&v=3&sensor=false&units=imperial", False
        .send
        xmlresp = .responseText
    End With

    objXML.LoadXML (xmlresp)
    Dim objElem As MSXML2.IXMLDOMElement
    Status = objXML.SelectSingleNode("DistanceMatrixResponse/row/element/status").Text
    If Status = "OK" Then
        Duration = objXML.SelectSingleNode("DistanceMatrixResponse/row/element/status/duration/text").Text
        Distance = objXML.SelectSingleNode("DistanceMatrixResponse/row/element/status/distance/text").Text
    End If
End Sub