【问题标题】:Can I pass an array into a Google App Script method from a Google Spreadsheet?我可以将数组从 Google 电子表格传递到 Google App 脚本方法吗?
【发布时间】:2013-08-18 07:13:58
【问题描述】:

我可以将数组从 Google 电子表格传递到 Google App 脚本方法吗?

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

我都尝试过:'=myFunc([1,2])' 和 '=myFunc((1,2))' 都给我一个解析错误。

【问题讨论】:

  • 向量值在sheet的单元格中?你能传递一个范围吗,=myFunc(A1:A2)
  • 它们不一定是工作表单元格中的值。即使是这样,您的建议也要求这些值在一个连续的范围内,这是我想避免的。

标签: javascript arrays google-apps-script google-sheets google-sheets-custom-function


【解决方案1】:

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

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

所以:

=myFunc({1,2})

=myFunc({1;2})

function myFunc(value)
{
}

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

【讨论】:

  • 非常好的选择。使用文本将是:=myFunc({"test, comma", 1, "another test; with ""quote"""})
  • 仔细查看那些只有一个值的情况,例如:=myFunc({1}),目前行为与预期不符,正在寻找解决方案。
  • 传递单个值=myFunc({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]")

【讨论】:

  • 这很有用,但是如果我要传入的值包含逗号怎么办?有没有办法引用它们,这样它们就不会被解析为拆分标记?
  • 你可以使用任何其他的分隔符,尝试一个永远不会在普通文本中使用的分隔符 |我喜欢这个|
  • 选择 eval() 可以处理这种情况,但是,您必须解决使用 eval() 的风险。 =myFunc("['test, comma', 1, 'other, test']")
【解决方案3】:

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

将调用 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
  ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    相关资源
    最近更新 更多