0

我正在尝试使用以下自定义函数DrivingKmsARRAYFORMULA以便递归计算指定列的距离。

我怎样才能更新它以便它可以使用ARRAYFORMULA

function DrivingKms(origin, destination) {
  
  return DrivingMeters(origin, destination)/1000;
}

function DrivingMeters(origin, destination) {
  var directions = Maps.newDirectionFinder()
  .setOrigin(origin)
  .setDestination(destination)
  .getDirections();
  return directions.routes[0].legs[0].distance.value;
}

当我在 an 中调用函数ARRAYFORMULA时,它只转换前两个位置点(F2 和 M2)。

={"DrivingKms";ARRAYFORMULA(IF(ISBLANK(A2:A),"",drivingkms(F2:F, M2:M)))}
4

1 回答 1

2

我相信你的目标如下。

  • 您想使用DrivingKmswith ={"DrivingKms";ARRAYFORMULA(IF(ISBLANK(A2:A),"",drivingkms(F2:F, M2:M)))}

为此,我想提出以下修改后的脚本。

修改点:

  • 在你的剧本中,我认为这DrivingMeters是正确的。但是当DrivingKms与 一起使用时={"DrivingKms";ARRAYFORMULA(IF(ISBLANK(A2:A),"",drivingkms(F2:F, M2:M)))},仅使用第一个元素。我认为这是您的问题的原因。
  • 使用时drivingkms(F2:F, M2:M)F2:FM2:M分别是二维数组。在您的情况下,需要考虑这一点。

模式一:

在此模式中,结果值在循环中检索。请DrivingKms进行如下修改。

修改后的脚本:

function DrivingKms(origin, destination) {
  return origin.map(([v], i) => [v && destination[i][0] ? DrivingMeters(v, destination[i][0]) / 1000 : ""]);
}

模式二:

在此模式中, from recursively calculates the distance down the specified columns.,结果值在递归循环中检索。为此,首先创建了valuesfor using at calc。请DrivingKms进行如下修改。

修改后的脚本:

function DrivingKms(origin, destination) {
  const calc = (values) => values.map ? values.map(calc) : DrivingMeters(...values.split(",")) / 1000;
  return calc(origin.map(([v], i) => [v, destination[i][0]].join(",")).filter(([a, b]) => a && b));
}

笔记:

  • 请在 V8 中使用上述脚本。

参考:

于 2020-07-21T01:45:03.773 回答