我在Google表格中制作了一个脚本:
/**
* @param {array} input A row or a column.
* @param {function} condition A function returning bool.
* @return The last value in the input satisfying the condition.
* @customfunction
*/
function GetLastGoodValIn1DArray(input, condition) {
// realization ...
}
当我尝试使用下一个参数调用此函数时:
=GetLastGoodValIn1DArray(D11:H11;ISNUMBER)
我收到了下一个错误:
错误
TypeError:#NAME?不是函数,而是字符串。 (第26行)。
显然'ISNUMBER'被解释为一个字符串。但是如何将它作为函数传递?
答案 0 :(得分:2)
根据此old google docs forum和此Stack Overflow question,无法从脚本访问内部Google工作表功能。
请注意,即使是google工作表内部函数也无法将函数作为参数。例如,内部函数SUBTOTAL不是直接获取函数,而是接收与所需函数相对应的数字代码。
我能想到的最好的是构建自己的WorksheetFunction对象,就像excel对vba一样。这可能是一个对象映射,它接收一个字符串并返回你编写的函数。例如:
var worksheetFunction = {
isnumber: function (x) {
return !isNaN(x);
}
};
另一个注意事项 :
ISNUMBER
不会作为字符串传递给自定义函数。谷歌工作表首先将其计算为错误然后 将字符串#NAME?
传递给您的自定义函数。您可以使用公式来查看=type(ISNUMBER)
,也返回16(错误代码) 您的自定义函数condition === "#NAME?"
将评估为true。