javascript - Google 脚本函数参数中需要引号吗?

标签 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)

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

我到处寻找解决方案来避免在调用公式时在公式周围加上引号,但到目前为止还没有成功。有人有想法吗?

最佳答案

error: Unknown range name carrier

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

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

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

... don't forget to add quotation marks around all function components made of alphabetic characters that aren't referring to cells or columns.

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

关于javascript - Google 脚本函数参数中需要引号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601019/

相关文章:

javascript - 在回调中访问 Svelte 组件属性?

javascript - 使用 Scrapy-splash 导航动态页面

mysql - Google Apps 脚本 - 仅从电子表格写入新行

google-apps-script - SpreadsheetApp.getActiveSpreadsheet() 请求访问 Google 上的数据

google-apps-script - 为什么 ui.alert 可以工作,但 ui.prompt 不能与 onOpen() 一起使用?

google-apps-script - 如何使用谷歌脚本锁定单元格?

javascript - 分配数组会导致某些数据出现语法错误

javascript - ReactJS,Redux : How do I return an array of items in my STATE?

google-apps-script - 将数据行复制到不同的工作表

javascript - 在没有时区的App Script中获取数据列