2

在这里遇到了一个奇怪的问题。我仍在学习为 Google Apps 编写函数的细节,我的第一个真正的项目是“运输仪表板”——基本上是一个电子表格,我可以在其中获取 UPS、FedEx 等的跟踪号,并从中获取解析载体,生成跟踪链接,那种东西。我正在尝试将其设置为一个函数,我可以在其中设置请求的数据类型(例如,承运人)、跟踪号,并让它返回所述信息。这是我现在所处的位置:

function trackingData(infoType,trackingNumber) {

  //Regex for various carrier's tracking numbers.
  var upsValue = /\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b/i;
  var fedexValue = /(\b96\d{20}\b)|(\b\d{15}\b)|(\b\d{12}\b)/;
  var uspsValue = /\b(91\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d|91\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d ?\d\d\d\d)\b/i;

  //First option: we want to know the carrier we're shipping with.
  if (infoType == 'carrier') {

    if (upsValue.test(trackingNumber)) {
      return 'UPS';
    }
    else if (fedexValue.test(trackingNumber)) {
      return 'FedEx';
    }
    else if (uspsValue.test(trackingNumber)) {
      return 'USPS';
    }
    else return null;
  }

传递 infoType 的值时会出现问题 - 如果我引用一个单元格,或者将每个 infoType 设置为变量并在调用公式时直接输入一个值,它就可以正常工作。但是,如果我通过放入一个单元格来调用它:

=infoType(carrier,trackingNumber)

我得到:

error: Unknown range name carrier

奇怪的是,如果我用以下方式调用它,它确实有效:

=infoType("carrier",trackingNumber)

(注意“运营商”周围的引号)。

我到处寻找解决方案,以避免在调用公式时不必在公式周围加上引号,但到目前为止还没有任何运气。有人有想法吗?

4

1 回答 1

1

错误:未知范围名称载体

该错误消息是由于电子表格解释函数参数的方式造成的。

函数参数是引用或数据元素(数字、日期、字符串)。引用可以是单个单元格 ( A1) 或区域 ( A1..A23)、不同工作表上的区域 ( Sheet2!A1) 或命名区域。当您carrier不带引号输入时,它被解释为命名范围。如果您有兴趣,请阅读命名和保护范围。

以下是来自Google 电子表格功能列表的序言文本中的一些提示:

...不要忘记在所有由字母字符组成的函数组件周围添加引号,这些字符不是指单元格或列。

摘要 - 如果您希望将参数作为字符串传递,请在其上加上引号。

于 2013-11-28T19:33:31.127 回答