我可以通过Google电子表格将数组传递到Google App Script方法吗?

时间:2013-08-18 07:13:58

标签: javascript google-apps-script google-sheets spreadsheet google-apps

我可以通过Google电子表格将数组传递到Google App Script方法吗?

假设我有一个App Script函数,它需要一个包含两个元素的列表(注意:这个例子只是一个例子,所以如果我只是将每个元素作为一个单独的参数传递,请不要告诉我我的问题会解决)。如何从Google电子表格单元格调用此功能?

我已经尝试了两种方法:'= myFunc([1,2])'和'= myFunc((1,2))'并且都给我一个解析错误。

3 个答案:

答案 0 :(得分:8)

在电子表格公式中,您可以使用花括号构造嵌入式数组。分号是行分隔符;逗号(或使用逗号作为小数分隔符的语言环境中的反斜杠)是列分隔符。

现在,当这些嵌入式数组传递给Google Apps脚本时,它们将被转换为二维Javascript数组,就像引用的范围一样。

所以:

=myFunc({1,2})

=myFunc({1;2})

function myFunc(value)
{
}

在第一个公式中,value将为[[1, 2]]。在第二个中,它将是[[1], [2]]

答案 1 :(得分:2)

一个选项是传递一串文本,然后将其转换为函数myFunc中的一个数组:

function myFunc(value) {
  var arr = value.split(',');
}

=myFunc("1,2")

function myFunc(value) {
  /* remember you have to be careful with this function: eval() */
  var arr = eval(value);
}

=myFunc("[1,2]")

答案 2 :(得分:0)

您可以将选定范围的单元格传递到您的 Javascript 函数中,如下所示:

enter image description here

将调用 Javascript 函数,并将值传递给单个参数,如下所示:

[[""],[""],["E3"],[""],["E1"],[""],[""],[""]]

可以使用简单的 mapfilter 链接对这个数组数组进行归一化:

function calculateSalaryMultiple(values) {

  // values == [[""],[""],["E3"],[""],["E1"],[""],[""],[""]]
  values = values.map(x=>x[0]).filter(x=>x);

  // values == ["E3", "E1"]
  // Rest of your logic
  ...