Google脚本函数参数中是否需要引号?

时间:2013-05-17 03:38:56

标签: javascript google-apps-script google-sheets

在这里遇到一些奇怪的问题。我还在学习为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)

(注意“承运人”周围的引号)。

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

1 个答案:

答案 0 :(得分:1)

  

错误:未知范围名称载体

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

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

以下是Google spreadsheets function list的前言文字中的一点提示:

  

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

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