Как извлечь расстояние из Google Directions API с помощью веб-запроса Excel? - PullRequest
4 голосов
/ 21 октября 2010

У меня есть длинный список мест отправления и назначения в Excel, с помощью веб-запроса я могу заполнить города и почтовый индекс, чтобы получить веб-запрос, например:

http://maps.googleapis.com/maps/api/directions/xml?origin=Scoresby&destination=Melborne&sensor=false

Это возвращает менядлинный XML-файл, но все, что мне нужно, это просто расстояние.Есть ли способ извлечь только значение расстояния?

Или я должен просто запустить макрос-скрипт для извлечения расстояния одно за другим?(Поскольку формат остается примерно одинаковым каждый раз, когда я спрашиваю сервер)

1 Ответ

5 голосов
/ 22 октября 2010

Краткий ответ: XPath - его стоит изучить, если вы собираетесь работать с любым видом XML

В редакторе макросов в Excel перейдите в Инструменты> Ссылки и добавьте ссылку на «Microsoft XML, v6.0». Теперь вставьте> Модуль и добавьте этот код:

Sub getDistances()

Dim xhrRequest As XMLHTTP60
Dim domDoc As DOMDocument60
Dim ixnlDistanceNodes As IXMLDOMNodeList
Dim ixnNode As IXMLDOMNode
Dim lOutputRow As Long

' Read the data from the website
Set xhrRequest = New XMLHTTP60
xhrRequest.Open "GET", "http://maps.googleapis.com/maps/api/directions/xml?origin=Scoresby&destination=Melborne&sensor=false", False
xhrRequest.send

' Copy the results into a format we can manipulate with XPath
Set domDoc = New DOMDocument60
domDoc.loadXML xhrRequest.responseText

' The important bit: select every node called "value" which is the child of a node called "distance" which is
' in turn the child of a node called "step"
Set ixnlDistanceNodes = domDoc.selectNodes("//step/distance/value")

' Basic stuff to output the distances
lOutputRow = 1
With Worksheets("Sheet1")
    .UsedRange.ClearContents
    For Each ixnNode In ixnlDistanceNodes
        .Cells(lOutputRow, 1).Value = ixnNode.Text
        lOutputRow = lOutputRow + 1
    Next ixnNode
End With

Set ixnNode = Nothing
Set ixnlDistanceNodes = Nothing
Set domDoc = Nothing
Set xhrRequest = Nothing

End Sub

Чтобы расширить это, чтобы охватить несколько поездок, вы просто должны пройти через все необходимые источники и пункты назначения, передать каждую пару в качестве параметров этой процедуре и затем вывести результаты в любом формате, который вам нужен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...