ArrayFormula 不能使用返回数组的自定义函数吗?

Is ArrayFormula not working with custom functions returning arrays?

如果编写一个简单的 Google Apps 脚本 自定义函数,如下所示

function colFunc(x) {
  
   if(Array.isArray(x)) {
     return x.map(v => colFunc(v))
   }

  return "A";
}

我可以在 ArrayFormula 中调用 colFunc(),一切都按预期完美运行(Google Sheet 将用“A”填充整个列)。

=ArrayFormula(colFunc(A1:A))

请注意,在此特定示例中,参数 x 的唯一用途是让我识别何时对整个列或单个单元格调用了该函数。

现在假设我要创建一个函数,它将 return 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 Sheet 不喜欢这个选项,结果只是显示一个空单元格。 我无法找到有关 ArrayFormula() 的此类限制的文档。我知道有几个限制(Query()Match()Index()、...),但我找不到关于这种使用方式的任何信息。

显然,我的实际功能不仅仅是 returning“a”、“b”和“c”。如果问题是用“a”、“b”和“c”填充 3 列,还有其他几个更简单的解决方案。

有什么建议或建议吗?

所有自定义函数都是数组公式。使用=ARRAYFORMULA()不需要明确指定是数组公式。 return 数组的唯一条件是它 return 是一个二维数组 Relatedcol3cellFunc 不会那样做。 x 是一个二维数组,脚本将每个元素映射到另一个二维数组,这将生成一个 4D 数组。如果打算创建一个 [a,b,c] 列,您可以简单地使用

function col3cellFunc(x) {
   return x.map(row => ['a','b','c'])//Note how  each row is mapped to a 1D array and NOT a 2D one
}

如果意图不同,您应该设计一个最佳策略,将 2D 输入塑造成所需的 2D 输出。