函数调用中未加引号的字符串
Unquoted strings in function calls
在我的 Google 表格 Apps 脚本插件中,我有一个自定义函数可以查询价格。例如,这样的调用:
=LOOKUP_PRICE("apple")
会return一个苹果的价格。但是,我注意到许多用户没有引用项目名称,而只是键入以下内容(表格允许):
=LOOKUP_PRICE(apple)
当我尝试使用 toString()
检索参数的字符串值时,我得到的只是字符串 "#NAME?"
.
有没有办法处理这种情况并理想地检索未引用时的参数值?
或者,是否有检测这种情况并显示相应错误消息的好方法?到目前为止我想出的是以下内容,但感觉很脏:
param.toString().toLowerCase() === "#name?"
由于这些函数是用 JavaScript 编写的,一旦您尝试传递不在双引号内的字符串,它就会抛出错误。
来自Custom Functions Documentation:
Google Sheets stores data in different formats depending on the nature of the data. When these values are used in custom functions, Apps Script treats them as the appropriate data type in JavaScript.
这意味着函数使用正常 JavaScript Data Structures 即字符串、数字等
您唯一真正的选择是教育您的用户如何正确使用该功能。
您可以为用户提供建议的最简单方法是为函数提供一个 JsDoc @customfunction
标记,这样您就可以自定义函数本身的帮助文本。这有助于您的用户使用自定义函数的语法。
这是一个您可以修改以满足您的要求的简短示例:
/**
* Searches for the price of the item specified.
*
* @param {"Apple"} item_to_find The item to find, e.g. "Apple", "Pear".
* @return Price of the item specified.
* @customfunction
*/
function LOOKUP_PRICE(item_to_find) {
if (item_to_find === "Apple") {
return ".99";
} else {
return "Not Found!";
}
}
当我们开始调用自定义函数时,我们得到:
参考文献:
在我的 Google 表格 Apps 脚本插件中,我有一个自定义函数可以查询价格。例如,这样的调用:
=LOOKUP_PRICE("apple")
会return一个苹果的价格。但是,我注意到许多用户没有引用项目名称,而只是键入以下内容(表格允许):
=LOOKUP_PRICE(apple)
当我尝试使用 toString()
检索参数的字符串值时,我得到的只是字符串 "#NAME?"
.
有没有办法处理这种情况并理想地检索未引用时的参数值?
或者,是否有检测这种情况并显示相应错误消息的好方法?到目前为止我想出的是以下内容,但感觉很脏:
param.toString().toLowerCase() === "#name?"
由于这些函数是用 JavaScript 编写的,一旦您尝试传递不在双引号内的字符串,它就会抛出错误。
来自Custom Functions Documentation:
Google Sheets stores data in different formats depending on the nature of the data. When these values are used in custom functions, Apps Script treats them as the appropriate data type in JavaScript.
这意味着函数使用正常 JavaScript Data Structures 即字符串、数字等
您唯一真正的选择是教育您的用户如何正确使用该功能。
您可以为用户提供建议的最简单方法是为函数提供一个 JsDoc @customfunction
标记,这样您就可以自定义函数本身的帮助文本。这有助于您的用户使用自定义函数的语法。
这是一个您可以修改以满足您的要求的简短示例:
/**
* Searches for the price of the item specified.
*
* @param {"Apple"} item_to_find The item to find, e.g. "Apple", "Pear".
* @return Price of the item specified.
* @customfunction
*/
function LOOKUP_PRICE(item_to_find) {
if (item_to_find === "Apple") {
return ".99";
} else {
return "Not Found!";
}
}
当我们开始调用自定义函数时,我们得到: