【问题标题】:Google Sheets Script: Passing function as a parameterGoogle表格脚本:将函数作为参数传递
【发布时间】:2016-07-23 16:37:05
【问题描述】:

我在 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)

我收到下一个错误:

错误

类型错误:#NAME?不是函数,而是字符串。 (第 26 行)。

显然 'ISNUMBER' 被解释为一个字符串。但是如何将其作为函数传递呢?

【问题讨论】:

  • 公式写得不对。尝试=GetLastGoodValIn1DArray(D11:H11;ISNUMBER(something)),其中可能是值或单元格引用。

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


【解决方案1】:

根据此old google docs forum 和此Stack Overflow question,无法从脚本访问内部谷歌表格功能。

请注意,即使是 google sheet 内部函数也不能将函数作为参数。例如,内部函数SUBTOTAL,不是直接取函数,而是取一个与所需函数对应的数字代码。

我能想到的最好的方法是构建自己的 WorksheetFunction 对象,就像 excel 用于 vba 一样。这可能是一个对象映射,它接受一个字符串并返回您编写的函数。例如:

var worksheetFunction = {
  isnumber: function (x) {
    return !isNaN(x);
  }
};

另一个注意事项ISNUMBER 不会作为字符串传递给您的自定义函数。 Google 表格首先将其计算为错误,然后 将字符串 #NAME? 传递给您的自定义函数。您可以通过使用公式看到这一点 =type(ISNUMBER),它也返回 16(错误代码) 您的自定义函数 condition === "#NAME?" 将评估为 true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多