You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:18:13