Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script ArrayFormula是否不使用返回数组的自定义函数?_Google Apps Script_Google Sheets_Google Sheets Formula_Custom Function - Fatal编程技术网

Google apps script ArrayFormula是否不使用返回数组的自定义函数?

Google apps script ArrayFormula是否不使用返回数组的自定义函数?,google-apps-script,google-sheets,google-sheets-formula,custom-function,Google Apps Script,Google Sheets,Google Sheets Formula,Custom Function,如果用户需要编写一个简单的谷歌应用程序脚本自定义函数,如下所示 function colFunc(x) { if(Array.isArray(x)) { return x.map(v => colFunc(v)) } return "A"; } 我可以在一个ArrayFormula中调用colFunc(),一切都如预期的那样完美(Google Sheet将用“A”填充整个列) 请注意,在这个特定示例中,参数x的唯一用途是允许我识别函数

如果用户需要编写一个简单的谷歌应用程序脚本自定义函数,如下所示

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

  return "A";
}
我可以在一个ArrayFormula中调用
colFunc()
,一切都如预期的那样完美(Google Sheet将用“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"]];
}
GoogleSheet不喜欢这个选项,结果只是显示一个空单元格。 我无法找到有关
ArrayFormula()
的此类限制的详细信息和文档。我知道有几个限制(
Query()
Match()
Index()
,…),但我找不到关于这种使用方法的任何信息

显然,我真正的函数不仅仅是返回“a”、“b”和“c”。如果问题是用“a”、“b”和“c”填充3列,则有几种其他更简单的解决方案


有什么建议吗?

所有自定义函数都是数组公式。无需使用
=ARRAYFORMULA()
明确指定它是一个数组公式。返回数组的唯一条件是它返回一个二维数组
col3cellFunc
不会这样做
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输出。

所有自定义函数都是数组公式。无需使用
=ARRAYFORMULA()
明确指定它是一个数组公式。返回数组的唯一条件是它返回一个二维数组
col3cellFunc
不会这样做
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输出。

谢谢@themaster!为什么我没有考虑这个选择?既然你提到了这一点,似乎很明显。谢谢谢谢@themaster!为什么我没有考虑这个选择?既然你提到了这一点,似乎很明显。谢谢