【问题标题】:Custom Sheets function to be used with ARRAYFORMULA与 ARRAYFORMULA 一起使用的自定义表格功能
【发布时间】:2020-11-10 07:56:53
【问题描述】:

我正在尝试将以下自定义函数 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;
}

当我在ARRAYFORMULA 中调用该函数时,从一路向下,它只转换前两个位置点(F2 和 M2)。

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

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-directions-api google-sheets-custom-function


    【解决方案1】:

    我相信你的目标如下。

    • 您想将DrivingKms={"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 : ""]);
    }
    

    模式 2:

    在此模式中,从recursively calculates the distance down the specified columns.,结果值在递归循环中检索。为此,首先创建values 用于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 中使用上述脚本。

    参考资料:

    【讨论】:

    • 是的,你已经正确理解了这个问题,尽管当我做出你建议的两个更改时,我得到了这个结果错误TypeError: Cannot read property 'legs' of undefined
    • 抱歉,我在公式中引用了不正确的列。使用你们的两个建议都有效! :) - 附带问题:您知道 Google 设置的用于计算距离的每日配额限制吗?
    • @Roggie 感谢您的回复。我很高兴你的问题得到了解决。关于你的新问题,这个官方文档可能会有用。 Ref 并且,当您想获得详细限制时,在您的环境中进行测试如何?因为我没有关于电流限制细节的信息。这是由于我的经验不佳。对此我深表歉意。
    • @Roggie 此外,这些线程可能很有用。 stackoverflow.com/q/21418298webapps.stackexchange.com/q/78222
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多