Google Sheets自定义函数调用Maps API:未知函数返回空值
解决Google Sheets自定义函数mapAddress的问题
一、先解决“未知函数”提示
- 确认脚本已保存:在Apps Script编辑器点击左上角保存按钮,给项目命名后关闭编辑器,刷新表格页面,再尝试输入
=mapAddress("目标地址")。 - 核对函数名拼写:表格中输入的函数名必须和脚本里的
mapAddress完全一致,注意大小写敏感。
二、修复代码逻辑错误(返回空值的核心原因)
你的代码存在三个关键问题:
- API响应结构解析错误:
findplacefromtext接口的formatted_address不在顶层对象里,而是嵌套在candidates数组的第一个元素中。 - 输入未做URL编码:如果地址包含空格、特殊字符,会导致API请求失效。
- 变量未声明:
obj和addr未用var/let/const声明,属于全局变量,可能引发意外问题。
修正后的代码:
function mapAddress(input) { if (!input) return "请输入地址"; const API_KEY = 'XXXXXXX'; const encodedInput = encodeURIComponent(input); // 指定fields参数才能获取formatted_address const url = `https://maps.googleapis.com/maps/api/place/findplacefromtext/json?query=${encodedInput}&key=${API_KEY}&fields=formatted_address`; try { const response = UrlFetchApp.fetch(url); const json = JSON.parse(response.getContentText()); if (json.candidates && json.candidates.length > 0) { return json.candidates[0].formatted_address; } else { return "未找到匹配地址"; } } catch (error) { return `请求错误:${error.message}`; } }
三、额外检查项
- 确认API密钥已启用「Places API」,并设置了正确的调用限制(比如允许Sheets Apps Script访问)。
- 检查Google Cloud控制台的Places API配额,配额不足会导致请求失败。
- 第一次运行函数时需完成授权:弹出权限请求时,确认授权脚本访问UrlFetchApp及相关API。
内容的提问来源于stack exchange,提问作者Mitch P
相关产品推荐
相关产品推荐

