获取两地址间距离与耗时的Google Sheets脚本报错求助
报错原因排查与修复方案
核心错误原因
报错Exception: Invalid argument: origin指向mapObj.setOrigin(start_address)一行,说明传入的起点地址参数无效,常见场景包括:
- 单元格为空,导致
start_address是null或空字符串 - 地址格式无法被Google Maps解析(拼写错误、模糊描述等)
- 函数调用时参数顺序或数量错误
分步修复方案
1. 校验函数调用的参数传递
确保Google Sheets中函数调用参数正确,示例:
=GOOGLEMAPS(A1, B1, "minutes")
- A1单元格需为有效起点地址(如
北京朝阳区建国路88号、1600 Amphitheatre Parkway, Mountain View) - B1为终点地址
- 第三个参数必须是
"miles"/"minutes"/"kilometers"三者之一,注意使用英文半角引号
2. 给脚本添加参数校验与错误处理
原脚本缺乏空值校验和异常捕获,修改后可避免崩溃并返回明确提示:
function GOOGLEMAPS(start_address, end_address, return_type) { // 校验参数非空 if (!start_address || !end_address || !return_type) { return "error:参数不能为空"; } // 校验返回类型合法性 const validTypes = ["miles", "minutes", "kilometers"]; if (!validTypes.includes(return_type)) { return "error:错误的单位类型,仅支持miles/minutes/kilometers"; } try { var mapObj = Maps.newDirectionFinder(); mapObj.setOrigin(start_address); mapObj.setDestination(end_address); var directions = mapObj.getDirections(); // 校验是否获取到有效路线数据 if (!directions.routes || directions.routes.length === 0 || !directions.routes[0].legs || directions.routes[0].legs.length === 0) { return "error:无法获取路线,请检查地址是否有效"; } var getTheLeg = directions["routes"][0]["legs"][0]; switch(return_type){ case "miles": return getTheLeg["distance"]["value"] * 0.000621371; case "minutes": var duration = getTheLeg["duration"]["value"]; return duration / 60; case "kilometers": return getTheLeg["distance"]["value"] / 1000; default: return "error:错误的单位类型"; } } catch (e) { return "error:" + e.message; } }
3. 优化地址格式提升解析成功率
- 提供完整地址:国家/地区 + 城市 + 街道 + 门牌号,避免模糊描述
- 中文地址确保无错别字,比如
北京市海淀区中关村大街1号而非北京海淀中关村 - 可添加邮政编码进一步提升解析准确率
4. 检查Google Apps Script权限
首次运行脚本时需授权Google Maps服务访问权限:
- 打开脚本编辑器,点击「运行」,按提示完成授权流程
- 确认账号未被限制Google Maps服务使用
内容的提问来源于stack exchange,提问作者Angela M
相关产品推荐
相关产品推荐

