作者:绿色风
分类:
时间:2022-08-17
浏览:114
楼主 嘉昆2011 |
声明素材来自:
- http://club.excelhome.net/thread-1024222-1-1.html
问题描述: A、B两列分别为货车的出发城市和到达城市,如何得知两个城市间的实际公里数和时间?
与原帖中的解决方案相比,本帖的解决方法具有以下特点: 1,速度相对会比原帖快一些,不会出现太长时间的“假死”现象; 2,利用Google Maps读取实际公里数和时间(原帖在百度地图中读取实际公里数,没有时间); 3,利用XML节点提取。
参考代码:
- Sub Test()
- Dim Arr
- Dim sOrigin As String, sDestination As String, sQuery As String
- Dim XMLRequest As XMLHTTP60
- Dim domDoc As DOMDocument60
- Dim DistanceNodes As IXMLDOMNodeList, DurationNodes As IXMLDOMNodeList
- Sheet1.Range("C2:D" & Sheet1.Cells(Rows.Count, 1).End(3).Row).ClearContents
- Set JS = CreateObject("MSScriptControl.ScriptControl")
- JS.Language = "JavaScript"
- Arr = Sheet1.Range("A2:B" & Sheet1.Cells(Rows.Count, 1).End(3).Row).Value
- For i = 1 To UBound(Arr)
- sOrigin = JS.Eval("encodeURI('" & Arr(i, 1) & "');")
- sDestination = JS.Eval("encodeURI('" & Arr(i, 2) & "');")
- sQuery = "http://maps.googleapis.com/maps/api/directions/xml?origin=" & sOrigin & "&destination=" & sDestination & "&sensor=false"
- Set XMLRequest = New XMLHTTP60
- XMLRequest.Open "GET", sQuery, False
- XMLRequest.send
- Application.Wait Now() + TimeValue("00:00:01")
- Set domDoc = New DOMDocument60
- domDoc.LoadXML XMLRequest.responseText
- On Error Resume Next
- Set DistanceNodes = domDoc.SelectNodes("//distance/text")
- Set DurationNodes = domDoc.SelectNodes("//duration/text")
- Sheet1.Range("C" & i + 1) = DistanceNodes.Item(DistanceNodes.Length - 1).Text
- Sheet1.Range("D" & i + 1) = DurationNodes.Item(DurationNodes.Length - 1).Text
- Next i
- Set DistanceNodes = Nothing
- Set DurationNodes = Nothing
- Set domDoc = Nothing
- Set XMLRequest = Nothing
- End Sub
最后效果:
附件:
城间距离.rar
|
2楼 水星钓鱼 |
学习 |
3楼 老糊涂 |
学习 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一