【发布时间】:2020-12-26 05:01:14
【问题描述】:
如果编写一个简单的 Google Apps 脚本自定义函数,如下所示
function colFunc(x) {
if(Array.isArray(x)) {
return x.map(v => colFunc(v))
}
return "A";
}
我可以在 ArrayFormula 中调用 colFunc(),一切都按预期完美运行(Google 表格将用“A”填充整个列)。
=ArrayFormula(colFunc(A1:A))
请注意,在此特定示例中,参数x 的唯一用途是让我识别何时在整个列或单个单元格上调用了该函数。
现在假设我要创建一个函数,该函数将为 3 个水平单元格返回 3 个值。公式代码为:
function cell3Func(x) {
return [["a", "b", "c"]];
}
如果我以标准方式调用它:
=cell3Func(A1)
我得到的预期结果分布在 3 个水平对齐的单元格中,其值为“a”、“b”和“c”。
现在,如果我想编写一个填充 3 个单元格(水平放置)的公式,同时能够为整个列利用 ArrayFormula() 的强大功能,该怎么办?
基于前面两个例子,我会写一个这样的函数:
function col3cellFunc(x) {
if(Array.isArray(x)) {
return x.map((v,i) => col3cellFunc(v[i]))
}
return [["a", "b", "c"]];
}
好吧,Google 表格不喜欢这个选项,结果只是显示一个空单元格。
我无法找到有关ArrayFormula() 的这种限制的文档。我知道有几个限制(Query()、Match()、Index()、...),但我找不到任何关于这种使用方式的信息。
显然,我真正的函数不仅仅是返回“a”、“b”和“c”。如果问题是用“a”、“b”和“c”填充 3 列,还有其他几个更简单的解决方案。
有什么建议或建议吗?
【问题讨论】:
标签: google-apps-script google-sheets google-sheets-formula custom-function