如何谷歌的街道地址和返回值使用Excel VBA的Excel?
我在Excel中有五万多个名单(如拱门国家公园,康奈尔玻璃博物馆)。 当我在Google上input“康奈尔玻璃博物馆”时,它会返回“1博物馆道,康宁,纽约14830”的地址。 我需要街道地址#街道名称和邮政编码 。 我确实有纽约州(在Excel中)。 有谁知道如何searchGoogle上的地址(input康奈尔玻璃博物馆),然后将街道地址返回到Excel(1 Museum Way,Corning,NY 14830)? 我知道VBA能做到这一点,我不想手动做5万次,再加上我是VBA的新手。 如果有人知道我将不胜感激! 先谢谢你。
以下应该是解决问题所需的信息
这里是一个post,展示了如何使用VBA和XML与谷歌地图(通过谷歌地图API)进行交互。
这里是谷歌的地方API,这是你正在寻找(请求/从谷歌接收信息)。
回答
我已经创build了一个工作testing。 你必须创build一个谷歌API的关键,你可以去这里做到这一点。 一旦你有API密钥,把它放进代码并运行它。
请注意,Google确实限制了API密钥每天使用的频率。 一个免费的用户似乎每天都得到1000个“请求”到“地点”API。 烦人的是,有些电话似乎比其他电话更值得“要求”。 我的代码打2谷歌的“地方”的API调用,但谷歌计为11请求。 这是因为对“place / textsearch”的调用值得10个“请求”。 我的另一个电话是地方/细节是值得的1.所有这一切都意味着,你每天限制在90个条目/免费的API密钥与此方法。
这是Google的地方/search文档
以下是Google的地点/详情文档
最后,对于这个话题, 这是一个了不起的post,我把我的代码放在了它的后面。
testing输出:
码:
Sub myTest() Dim xhrRequest As XMLHTTP60 Dim domDoc As DOMDocument60 Dim domDoc2 As DOMDocument60 Dim placeID As String Dim query As String Dim nodes As IXMLDOMNodeList Dim node As IXMLDOMNode 'you have to replace spaces with + query = "Cornell+Museum+of+Glass" 'You must acquire a google api key and enter it here Dim googleKey As String googleKey = "imaginary api key" 'your api key here 'Send a "GET" request for place/textsearch Set xhrRequest = New XMLHTTP60 xhrRequest.Open "GET", "https://maps.googleapis.com/maps/api/place/textsearch/xml?" & _ "query=Cornell+Museum+of+Glass&key=" & googleKey, False xhrRequest.send 'Save the response into a document Set domDoc = New DOMDocument60 domDoc.LoadXML xhrRequest.responseText 'Find the first node that is called "place_id" and is the child of the "result" node placeID = domDoc.SelectSingleNode("//result/place_id").Text 'recycling objects (could just use new ones) Set domDoc = Nothing Set xhrRequest = Nothing 'Send a "GET" request for place/details Set xhrRequest = New XMLHTTP60 xhrRequest.Open "GET", "https://maps.googleapis.com/maps/api/place/details/xml?placeid=" & placeID & _ "&key=" & googleKey, False xhrRequest.send 'Save the response into a document Set domDoc = New DOMDocument60 domDoc.LoadXML xhrRequest.responseText Dim output As String Dim s As String 'hacky way to get postal code, you might want to rewrite this after learning more Set nodes = domDoc.SelectNodes("//result/address_component/type") For Each node In nodes s = node.Text If s = "postal_code" Then 'this is bad, you should search for "long_name", what i did here was assume that "long_name was the first child" output = vbNewLine & "Postal Code: " & node.ParentNode.FirstChild.Text End If Next node 'output MsgBox "Formatted Address: " & domDoc.SelectSingleNode("//result/formatted_address").Text & output End Sub
“####
编辑:现在使用地方API而不是地理编码API
我有一个错误类似于上面的海报,我修正了,并希望张贴修复的地方,因为我现在正在使用此代码的修改后的版本,一旦它的工作,我也将张贴。 发生了什么事是我传递了谷歌没有结果的名字。 如果你可能在类似的小船,下面的行是一个积极的检查,如果你有东西回来:(否定不= =“ZERO_RESULTS”)
if domDoc.selectSingleNode("//status").Text = "OK"
你必须得到一个API密钥,然后代码将工作得很好。 转到下面的链接,然后点击“GET A KEY”button。
https://developers.google.com/maps/documentation/javascript/tutorial
- 使用Google地图API在Excel中查找两个城市之间的距离
- 彭博API报价回顾显示器
- 如何使用Google Drive / Spreadsheet API将excel文件转换/导入为新的工作表?
- JavaScript – 使用OFFICE JS API创build和编辑.xls或.xlsx(Excel电子表格)文件
- 使用Rblapi包来提取数据
- 用aplsx :: Package在apis中发送xlsx数据,并再次将收到的响应string转换为Axlsx :: Package类
- Google从Google Insights切换到Google Trends后,Excel VBmacros停止工作
- 在Excel中使用Webservice函数从Yahoo Finance中使用Yahoo API提取“Next Earnings Date”
- 如何编程Excel以使用Outlook?