2010-10-21 4 views
4

J'ai une longue liste d'origines et des destinations dans Excel, en utilisant WebQuery je peux remplir dans les villes et le code postal pour donner un WebQuery comme:Comment puis-je extraire la distance de l'API Google Directions via une requête Web Excel?

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

Cela me renvoie un fichier XML long, mais tout J'ai besoin est juste la distance. Existe-t-il un moyen d'extraire uniquement la valeur de distance? Ou devrais-je simplement exécuter un script de macro pour extraire la distance un par un? (Étant donné que le format reste à peu près le même chaque fois que je demande au serveur)

Répondre

5

La réponse courte est XPath - vaut bien apprendre si vous allez travailler avec tout type de XML

Dans l'éditeur de macros dans Excel, allez dans Outils> Références et ajoutez une référence à « Microsoft XML, v6.0 » maintenant Insertion> Module et ajoutez ce code:

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 

pour l'étendre aux multiples voyages que vous le feriez simplement boucle à travers les origines requises et destinations, passez chaque paire en tant que paramètres de cette procédure, puis affichez les résultats dans le format de votre choix

+2

Très bel exemple. Juste comme un rappel (et je ne veux pas être un funspoiler): L'utilisation de l'API Google Maps nécessite que vous montriez une carte Google ainsi ("l'API Directions peut seulement être utilisé en conjonction avec l'affichage des résultats sur un Google map ", http://code.google.com/intl/fr/apis/maps/documentation/directions/#Limits) bien que dans cet exemple particulier, je ne vois pas comment cela pourrait être fait de manière utile. Juste sayin. –

Questions connexes