Google maps api 3 应用程序脚本中的谷歌地图API不断失败

Google maps api 3 应用程序脚本中的谷歌地图API不断失败,google-maps-api-3,google-apps-script,google-sheets,Google Maps Api 3,Google Apps Script,Google Sheets,我正在使用谷歌应用程序脚本为谷歌地图编写一个测距仪。我已经找到了这样的例子,但它们总是失败,所以我想我应该自己编写代码。不幸的是,这是失败的,同样的错误: TypeError: Cannot read property "legs" from undefined. (line 16). 它似乎有时起作用,有时不起作用。我的工作表中有几(3)处调用相同的函数,有时一个或多个函数将返回有效响应 我在其他地方看到,人们建议使用API键来确保获得良好的响应,所以这就是我在下面实现的。(api密钥已编辑

我正在使用谷歌应用程序脚本为谷歌地图编写一个测距仪。我已经找到了这样的例子,但它们总是失败,所以我想我应该自己编写代码。不幸的是,这是失败的,同样的错误:

TypeError: Cannot read property "legs" from undefined. (line 16).
它似乎有时起作用,有时不起作用。我的工作表中有几(3)处调用相同的函数,有时一个或多个函数将返回有效响应

我在其他地方看到,人们建议使用API键来确保获得良好的响应,所以这就是我在下面实现的。(api密钥已编辑!是否有一种好方法来判断它们是否已被识别?)

你知道会出什么问题吗

提前感谢,

迈克


这是我在解决问题时的短期解决方案

这并不理想,但至少可以尽可能减少API的使用限制

function getDistance(start, end) {

 return hackyHack(start, end, 0);
}

function hackyHack(start, end, level) {
  if (level > 5) {
    return "Error :(";
  }
  var directions = Maps.newDirectionFinder()
     .setOrigin(start)
     .setDestination(end)
     .setMode(Maps.DirectionFinder.Mode.DRIVING)
     .getDirections();
  var route = directions.routes[0];

  if (!route) return hackyHack(start, end, level+1); // Hacky McHackHack

  var distance = route.legs[0].distance.text;
  // var time = route.legs[0].duration.text;
  return distance;
}

尝试检查开发人员如何捕获此相关文件中的错误。这可能有助于查明未定义属性的问题。开发人员记录了
getDirection()
directions[“routes”][0]
directions[“routes”][0]。“legs”]
,并在调用下一个属性之前添加句点。希望这有帮助。谢谢。这是个好主意,我也试过了。问题似乎是,有时有效,有时无效。实际上,有时会运行相同的代码,然后我再次点击run,它就失败了!太气人了!在我的环境中,您的脚本可以正常工作。尽管我不确定这对您的情况是否有用,例如,您是否可以尝试删除
maps.setAuthentication(“######”和“####””然后再次运行?我已经尝试过了。我现在用相同的公式设置了两个单元格<代码>=mikeDistance(B1,B2)
-有时一个有效,有时另一个有效,有时两者都无效。。。身份验证似乎没有任何区别。我的解决方案是制作一张表格,在整行上多次(大约10次)调用它,然后获取不是错误的答案。。。这是超级黑客,但它似乎产生了一个结果。。。它也非常慢,但是,嘿,它现在可以用了。我最后用了这个,它很好。这似乎是谷歌API的一个问题,但从本质上说,它让我现在开始运行!谢谢
function getDistance(start, end) {

 return hackyHack(start, end, 0);
}

function hackyHack(start, end, level) {
  if (level > 5) {
    return "Error :(";
  }
  var directions = Maps.newDirectionFinder()
     .setOrigin(start)
     .setDestination(end)
     .setMode(Maps.DirectionFinder.Mode.DRIVING)
     .getDirections();
  var route = directions.routes[0];

  if (!route) return hackyHack(start, end, level+1); // Hacky McHackHack

  var distance = route.legs[0].distance.text;
  // var time = route.legs[0].duration.text;
  return distance;
}