Google表格脚本:将函数作为参数传递

时间:2016-07-23 16:37:06

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

我在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'被解释为一个字符串。但是如何将它作为函数传递?

1 个答案:

答案 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。