问题描述
如果我通过键入“ = chart(A2:A5,B2:B5”)从Google表格单元格中调用以下函数,则不会打印任何内容,甚至不会显示错误消息。我希望打印的是两行,其中一行包含A2:A5的内容,另一个包含B2:B5的内容。
function chart(range,range2){
return [range,range2];
}
但是,如果我返回不包含参数值的2D数组,则它会正确显示信息。如果我叫“ = chart(A2:A5,B2:B5”,则将创建两行,第一行包含车辆列表,下面是数字列表。
function chart(range,range2){
vehicles = ["airplane","motorcycle",spaceship]
numbers = [43,29,11]
return [vehicles,numbers];
}
如果进行组合(如下所示),第一行将保留为空白,第二行将包含车辆列表。
function chart(range,"spaceship"]
return [range,vehicles];
}
对于最后一个示例,我从“范围”参数中获取了一个值,并将其添加到数组中的数组中。这次,第一行将包含车辆列表,第二行将包含值“ 1、2、3”,在2和3之间有一个空格。
function chart(range,spaceship,"submarine"]
numbers = [1,2,range[0],3]
return [vehicles,numbers];
}
总而言之,每次我尝试返回包含参数值(或整个参数)的2D数组时,这些值在Google表格中都会留空。它仅在2D阵列中发生。返回2D数组的工作原理是在所有其他不包含数组中参数值的情况下都可以找到。 任何帮助将不胜感激。
解决方法
对于您的问题,请注意以下有关自定义功能的规则。
-
作为自定义函数的返回值,它们是数字,字符串,布尔值,一维数组,二维数组。
-
将
=chart(A2:A5,B2:B5)
放在单元格中时,在Google Apps脚本一侧,A2:A5
和B2:B5
是包含单元格值的二维数组。
根据上述规则,我认为您遇到问题的原因是将二维数组放入[]
中。在这种情况下,它是3维数组。我想为每个脚本回答如下。
根据您的情况,它假设每个脚本都将=chart(A2:A5,B2:B5)
放在单元格中。
答案1:
关于以下脚本,
function chart(range,range2){
return [range,range2];
}
我认为您遇到问题的原因是,将=chart(A2:A5,B2:B5)
放在单元格中时,A2:A5
和B2:B5
是二维数组。例如,A2:A5
就像[['a2'],['a3'],['a4'],['a5']]
。由此,[range,range2]
是3维数组。将数组用作自定义函数的返回值时,可以使用1维和2维数组。
要放置[range,range2]
之类的值时,需要按如下所示合并range
和range2
。
function chart(range,range2){
return range.concat(range2);
}
如果要将range,range2
放在2行中,则脚本如下。
function chart(range,range2){
return [range.flat(),range2.flat()];
}
答案2:
关于以下脚本,
function chart(range,range2){
vehicles = ["airplane","motorcycle","spaceship"]
numbers = [43,29,11]
return [vehicles,numbers];
}
在这种情况下,vehicles
和numbers
是一维数组。这样,[vehicles,numbers]
是二维数组,并且每个值都被放置到每一行的单元格中。似乎即使返回3维数组,也不会发生错误。
答案3:
关于以下脚本,
function chart(range,"spaceship"]
return [range,vehicles];
}
在这种情况下,range
和vehicles
是2维数组和1维数组。如此一来,range
中的[range,vehicles]
不能放入单元格,而vehicles
则不能放入单元格。
答案4:
关于以下脚本,
function chart(range,spaceship,"submarine"]
numbers = [1,2,range[0],3]
return [vehicles,numbers];
}
在这种情况下,当在其他位置声明spaceship
时,range[0]
是一维数组,类似于[1,[#,#,],3]
。因为range
是二维数组。看起来当元素是数字和一维数组时,不会放置一维数组。例如,将[1,3]
修改为[1,range[0][0],3]
时,可以放置range[0][0]
。
注意:
- 在自定义函数中,似乎当数组是二维数组时,不需要像
const sample = () => [[1,3],[1],[,[1,2]];
那样使每列长度相同。