Google Sheets中IMPORTJSON提取Geocoding指定地址组件求助
解决Google Sheets中提取地理编码API特定地址组件的问题
问题核心
你用IMPORTJSON调用谷歌地理编码API时没法直接筛选出类型为locality,political的地址组件,本质原因是IMPORTJSON的默认路径语法只支持按JSON层级提取数据,不支持条件过滤,所以会返回所有address_components内容,分散在多行多列。
解决方案一:自定义Google Apps Script函数(推荐)
直接在API请求后做数据筛选,精准返回你需要的城市名称,步骤如下:
- 打开你的Google Sheets,点击顶部菜单栏「扩展程序」→「Apps Script」
- 删除编辑器里的默认代码,粘贴以下代码:
function GET_CITY(lat, lng, apiKey) { var requestUrl = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`; var apiResponse = UrlFetchApp.fetch(requestUrl); var parsedData = JSON.parse(apiResponse.getContentText()); // 遍历地址组件,筛选符合locality,political的项 for (let result of parsedData.results) { for (let component of result.address_components) { if (component.types.includes("locality") && component.types.includes("political")) { return component.long_name; // 需要短名称的话,替换为component.short_name } } } return "未匹配到城市"; }
- 点击编辑器顶部的保存按钮,给项目起个名字(比如
CityExtractor),关闭Apps Script页面 - 回到表格,在D2单元格输入公式:
=GET_CITY(B2,C2,"你的真实API密钥")
- 下拉单元格填充整列,即可批量获取对应坐标的城市名称
解决方案二:原生函数组合(无脚本)
如果不想用自定义脚本,可以用FILTER+REGEXMATCH+INDEX组合处理IMPORTJSON的返回结果:
- 先在D2单元格保留原
IMPORTJSON公式(路径设为/results/address_components),让它返回所有地址组件 - 假设返回的
types列在F列(具体列位根据你的实际返回结果调整),在目标单元格输入:
=INDEX(FILTER(D:D, REGEXMATCH(F:F, "locality.*political")),1)
这种方法的缺点是IMPORTJSON返回的列位置可能随API响应变化,稳定性不如自定义函数。
内容的提问来源于stack exchange,提问作者Jonathan Fraser
相关产品推荐
相关产品推荐

