如何用Google地址验证API验证SQL/Access/Excel中的地址?
使用Google地址验证API验证地址的实现方案(支持SQL/Excel/Access数据源)
完全可行,以下是针对不同数据源的具体实现步骤:
一、Microsoft SQL Server 数据源
SQL Server本身无法直接调用外部API,需要借助脚本或ETL工具实现,这里以Python为例(简单易上手):
步骤1:读取SQL中的地址数据
用pyodbc库连接SQL Server并读取地址字段:import pyodbc import requests import time # 配置SQL连接参数 conn_str = 'DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的服务器名;DATABASE=你的数据库名;UID=用户名;PWD=密码' conn = pyodbc.connect(conn_str) cursor = conn.cursor() # 替换为你的表名和地址字段名 cursor.execute("SELECT id, address FROM your_address_table") address_list = cursor.fetchall() conn.close()步骤2:调用Google地址验证API批量验证
先在Google Cloud控制台申请API密钥并启用Address Validation API,然后编写调用逻辑:API_KEY = '*你的Google API密钥*' BASE_URL = f'https://addressvalidation.googleapis.com/v1:validateAddress?key={API_KEY}' for addr_id, raw_addr in address_list: if not raw_addr: continue # 构造请求体,建议拆分地址字段(如街道、城市)以提高准确率 payload = { "address": { "addressLines": [raw_addr] } } try: response = requests.post(BASE_URL, json=payload) response.raise_for_status() result = response.json() # 提取核心验证结果 is_valid = result.get('result', {}).get('verdict', {}).get('isValid', False) normalized_addr = result.get('result', {}).get('address', {}).get('formattedAddress', '') # 可将结果回写SQL或保存到本地文件 print(f"ID: {addr_id}, 原地址: {raw_addr}, 有效: {is_valid}, 标准化地址: {normalized_addr}") # 速率控制,避免触发限流 time.sleep(1) except Exception as e: print(f"验证地址ID {addr_id} 失败: {str(e)}")步骤3:回写验证结果到SQL(可选)
再次连接SQL Server,执行UPDATE语句将验证结果写入对应字段(需提前在表中添加is_valid和normalized_address字段)。
另外也可以用SSIS(SQL Server Integration Services)的脚本任务,通过C#/VB编写API调用逻辑,实现数据的读取、验证、回写全流程。
二、Excel 数据源
推荐用VBA或Power Query实现:
方法1:VBA脚本
- 打开Excel,按
Alt+F11进入VBA编辑器,插入模块 - 先启用
Microsoft XML, v6.0和VBA-JSON模块(需自行下载导入VBA-JSON) - 编写验证脚本:
Sub ValidateExcelAddresses() Dim APIKey As String Dim baseURL As String Dim xmlHttp As Object Dim jsonObj As Object Dim lastRow As Integer Dim i As Integer APIKey = "*你的Google API密钥*" baseURL = "https://addressvalidation.googleapis.com/v1:validateAddress?key=" & APIKey Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0") ' 假设地址在A列,结果写入B(是否有效)、C(标准化地址)列 lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow rawAddr = Cells(i, "A").Value If rawAddr <> "" Then On Error Resume Next xmlHttp.Open "POST", baseURL, False xmlHttp.setRequestHeader "Content-Type", "application/json" xmlHttp.send "{""address"": {""addressLines"": [""" & rawAddr & """]}}" If Err.Number = 0 Then Set jsonObj = JsonConverter.ParseJson(xmlHttp.responseText) Cells(i, "B").Value = jsonObj("result")("verdict")("isValid") Cells(i, "C").Value = jsonObj("result")("address")("formattedAddress") Else Cells(i, "B").Value = "验证失败" End If On Error GoTo 0 ' 速率控制 Application.Wait Now + TimeValue("00:00:01") End If Next i End Sub
方法2:Power Query
- 将地址数据加载到Power Query,添加自定义列,通过M语言调用API(需注意批量调用的速率限制,建议分批处理),解析JSON后提取验证结果。
三、MS Access 数据源
通过VBA实现,步骤类似Excel:
- 打开Access数据库,按
Alt+F11进入VBA编辑器,导入VBA-JSON模块 - 编写脚本读取表中地址、调用API并更新结果:
Sub ValidateAccessAddresses() Dim APIKey As String Dim baseURL As String Dim rs As Recordset Dim xmlHttp As Object Dim jsonObj As Object APIKey = "*你的Google API密钥*" baseURL = "https://addressvalidation.googleapis.com/v1:validateAddress?key=" & APIKey Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0") ' 替换为你的表名,需提前添加is_valid(布尔型)和normalized_address(文本型)字段 Set rs = CurrentDb.OpenRecordset("SELECT id, raw_address FROM your_access_table") Do While Not rs.EOF rawAddr = rs("raw_address").Value If rawAddr <> "" Then On Error Resume Next xmlHttp.Open "POST", baseURL, False xmlHttp.setRequestHeader "Content-Type", "application/json" xmlHttp.send "{""address"": {""addressLines"": [""" & rawAddr & """]}}" If Err.Number = 0 Then Set jsonObj = JsonConverter.ParseJson(xmlHttp.responseText) rs.Edit rs("is_valid") = jsonObj("result")("verdict")("isValid") rs("normalized_address") = jsonObj("result")("address")("formattedAddress") rs.Update End If On Error GoTo 0 ' 速率控制 Application.Wait Now + TimeValue("00:00:01") End If rs.MoveNext Loop rs.Close Set rs = Nothing Set xmlHttp = Nothing End Sub
关键注意事项
- 必须在Google Cloud控制台完成API密钥申请和Address Validation API启用,注意API调用有计费规则,批量验证前建议查看定价详情。
- 严格遵守Google的API速率限制,添加延迟避免被限流封禁。
- 若地址数据有拆分字段(如街道、城市、邮编),建议拆分传入API,能大幅提高验证准确率。
内容的提问来源于stack exchange,提问作者Angela Marie
相关产品推荐
相关产品推荐

