Google Sheets驾驶距离计算函数失效,请求技术指导
解决Google Maps服务调用次数超限问题
我使用以下代码计算城市间的驾驶英里数:
function DrivingMeters(origin, destination) { var directions = Maps.newDirectionFinder() .setOrigin(origin) .setDestination(destination) .getDirections(); return directions.routes[0].legs[0].distance.value; } function DrivingMiles(origin, destination) { return DrivingMeters(origin, destination)/1609.34; }该代码已正常使用6-7年,但近期出现报错:
Error Exception: Service invoked too many times for one day: route. at DrivingMeters(drivingmiles:5:4) at DrivingMiles(drivingmiles:10:10)我方未更改任何流程,数据导入Google Sheets后脚本按单元格逐一运行,恳请提供解决指导。
解决指导
核查每日调用配额:Google Apps Script的Maps Directions服务有固定每日调用限额,可能是Google调整了配额标准,或是你的数据量增长触发了上限。可在Google Apps Script编辑器的「资源」>「云平台项目」中查看当前配额使用情况,确认是否达到每日上限。
添加缓存机制:针对重复的起点终点对,直接返回缓存结果,避免重复调用API。修改代码如下:
function DrivingMeters(origin, destination) { var cacheKey = origin + "|" + destination; var cache = CacheService.getScriptCache(); var cachedValue = cache.get(cacheKey); if (cachedValue !== null) { return parseInt(cachedValue); } var directions = Maps.newDirectionFinder() .setOrigin(origin) .setDestination(destination) .getDirections(); var distance = directions.routes[0].legs[0].distance.value; // 缓存结果1天(86400秒) cache.put(cacheKey, distance.toString(), 86400); return distance; } function DrivingMiles(origin, destination) { return DrivingMeters(origin, destination)/1609.34; }改为批量处理:不要让每个单元格单独触发函数调用,改成一次性读取所有需要计算的起点终点对,批量计算后再写入结果列,大幅减少API调用次数。
升级付费API:如果免费配额无法满足需求,可切换到Google Cloud的付费Maps Directions API,付费后配额更高,能支持更大的数据量。需在云平台项目中启用该API,并修改代码使用API密钥调用(注意密钥安全存储)。
优化数据去重:提前清理Sheet中重复的起点终点对,只计算一次重复项,减少无效调用。
内容的提问来源于stack exchange,提问作者Bryce
相关产品推荐
相关产品推荐

