【问题标题】:Quotes Required in Google Script Function Parameters?Google 脚本函数参数中是否需要引号?
【发布时间】:2013-05-17 03:38:56
【问题描述】:

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

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

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

【问题讨论】:

  • 值周围的引号表示它是一段文本(又名字符串)。如果它没有该描述,则解析器认为它要么是变量,要么是其他标识符。我认为你坚持添加引号。
  • 如果你这样做会发生什么:carrier = "carrier"; infoType(carrier,trackingNumber);?
  • @Orangepill - 让我失望的部分是,如果它引用另一个单元格(而不是手动输入载体作为函数的一部分),它就可以正常工作。在这一点上,我假设这将是函数中的一种解决方法,只是不确定如何最好地做到这一点。
  • @dave - 我打错了;我在单元格中使用 =trackingData(infoType,trackingNumber) 。我已经在本地和全球范围内尝试过该解决方案,但它仍然会引发相同的错误。
  • 您可以将运营商设置为单元格的内容,并在函数中按名称引用它。

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


【解决方案1】:

错误:未知范围名称载体

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

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

这是来自带有Google spreadsheets function list的序言文本的一点提示:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2014-01-20
    • 1970-01-01
    相关资源
    最近更新 更多