首页 > 解决方案 > 在尝试将该参数中的值作为二维数组返回时,在以范围作为参数的 Google 表格自定义函数上,不会打印该值

问题描述

如果我通过键入“=chart(A2:A5, B2:B5”从 Google 表格单元格中调用以下函数,则不会打印任何内容,甚至不会打印错误消息。我希望打印的是两行,其中一行包含A2:A5 和另一个包含 B2:B5 的内容。

function chart(range, range2){
  return [range, range2];
}

但是,如果我返回一个不包含参数值的二维数组,那么它会正确显示信息。如果我调用 "=chart(A2:A5, B2:B5" 将创建两行,第一行包含车辆列表,然后是数字列表。

function chart(range, range2){
  vehicles = ["airplane", "motorcycle", spaceship]
  numbers = [43, 29, 11]
  return [vehicles, numbers];
}

如果我进行组合,如下所示,第一行将留空,第二行将包含车辆列表。

function chart(range, range2){
  vehicles = ["airplane", "motorcycle", "spaceship"]
  return [range, vehicles];
}

对于最后一个示例,我从“范围”参数中获取了一个值,并将其添加到数组中的数组中。这次,第一行将包含车辆列表,第二行将包含值“1, 2, , 3”,其中 2 和 3 之间有一个空格。

function chart(range, range2){
  vehicles = ["airplane", "motorcycle", spaceship, "submarine"]
  numbers = [1, 2, range[0], 3]
  return [vehicles, numbers];
}

总之,每次我尝试返回一个包含参数值(或整个参数)的二维数组时,这些值在 Google 表格上都是空白的。它只发生在二维数组上。返回 2D 数组仅适用于我未在数组中包含参数值的所有其他情况。任何帮助,将不胜感激。

标签: javascriptgoogle-sheetsscripting

解决方案


对于您的问题,请注意自定义功能的以下规则。

  • 作为自定义函数的返回值,它们是数字、字符串、布尔值、一维数组、二维数组。

  • 在 Google Apps 脚本端,当=chart(A2:A5, B2:B5)被放入单元格时,A2:A5B2: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维数组。当数组作为自定义函数的返回值时,可以使用一维和二维数组。

当您要放置类似的值[range, range2]时,需要合并rangerange2如下所示。

function chart(range, range2){
  return range.concat(range2);
}

如果要放入range, range22 行,脚本如下。

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];
}

在这种情况下,vehiclesnumbers是一维数组。这样,[vehicles, numbers]是二维数组,每个值都被放入每行的单元格中。似乎即使返回 3 维数组,也不会发生错误。

答案 3:

关于以下脚本,

function chart(range, range2){
  vehicles = ["airplane", "motorcycle", "spaceship"]
  return [range, vehicles];
}

在这种情况下,rangevehicles是二维数组和一维数组。这样,rangeof[range, vehicles]不能被放入单元格中,而vehicles被放入。

答案 4:

关于以下脚本,

function chart(range, range2){
  vehicles = ["airplane", "motorcycle", spaceship, "submarine"]
  numbers = [1, 2, range[0], 3]
  return [vehicles, numbers];
}

在这种情况下,当spaceship在其他地方声明时,range[0]是一维数组,如[1, 2, [#, #, #,,,], 3]. 因为range是二维数组。似乎当元素是数字和一维数组时,一维数组没有放。例如,当[1, 2, range[0], 3]被修改为时[1, 2, range[0][0], 3]range[0][0]可以放。

笔记:

  • 在自定义函数中,似乎当数组是二维数组时,每个列的长度不需要相同const sample = () => [[1, 2, 3], [1], [, 2, 3], [1, 2]];

参考:


推荐阅读