如何将命名范围作为单元格而不是范围传递给自定义函数?

How to pass named range to custom function as cell and not as range?

提问人:just_a_developer 提问时间:3/13/2022 更新时间:3/13/2022 访问量:402

问:

在 Google 表格的“Apps 脚本”中,我定义了一个自定义函数,该函数接收格式和一些值,然后将值替换到格式的占位符中并返回它。

function PRINT_DETAILS(format, productName, quantity) {
    /* format expects a string with placeholders like: "{productName} {quantity}"
       product: expects a string
       quantity: expects an integer
    */
}

在产品“表”中,有以下列:名称、数量、价格等。 其中每个都有自己的命名范围。

我定义了一个“print”列,我在其中调用函数,如下所示: = PRINT_DETAILS(“{productName} {quantity}”; Products.Name;产品数量)

问题是我的函数接收的是整个命名范围,而不仅仅是同一行的单元格值。 即我收到所有产品名称和所有产品数量...

我成功地以多种方式将命名范围用作单元格值:在“IF”条件下添加它们,concat 运算符“&”等。 即使在标准函数调用中。

这就是为什么我相信有一种方法可以在自定义函数中做同样的事情。

我不想牺牲使用 A1 等单元格引用的可读性。

所以我正在寻找一种方法来约束参数,或者以一种不太笨拙的方式获得我想要的值。 此外,如果我们可以查看 Google 表格的源代码,也许这些标准函数也是在 JavaScript 中实现的,并且它们已经解决了这个问题。

javascript google-apps-script google-sheets google-sheets-formula named-ranges

评论

0赞 Cooper 3/13/2022
用户属性怎么样
1赞 TheWizEd 3/13/2022
我假设 Products.Name 和 Products.Quantity 是命名范围。其中每个都有一个项目列表。您如何指定这些范围内的特定项目?
0赞 TheWizEd 3/13/2022
我认为没有等效于获取与行对应的命名范围值的 Excel 功能。

答:

1赞 TheWizEd 3/13/2022 #1

描述

Excel 具有一项功能,可以将命名范围的值传递给与公式所在的行相对应的自定义公式。不幸的是,Google 表格没有该功能。相反,您需要获取公式的行号。

请注意,这假定命名范围从第 1 行开始,并且公式位于任何工作表中的同一行上。

感谢迈克·斯蒂尔森(Mike Steelson),我稍微修改了剧本以改进剧本。但不是尖叫镜头。

=PRINT_DETAILS("{productName} {quantity}",Products.Name,Products.Quantity)

屏幕截图

enter image description here

脚本

function PRINT_DETAILS(format,productName,quantity) {
  try {
    var row = SpreadsheetApp.getActiveRange().getRow();
    return [productName[row-1],quantity[row-1]];
  }
  catch(err) {
    return err.message;
  }
}

参考

评论

1赞 Mike Steelson 3/13/2022
在函数中,您可以替换 by 和省略rowSpreadsheetApp.getActiveRange().getRow()Row(A2)
0赞 TheWizEd 3/13/2022
我不这么认为,因为每次光标更改位置时,这都会更改行号。
1赞 Mike Steelson 3/13/2022
不,尝试一下,在一个函数中,将采用应用该函数的单元格的行!SpreadsheetApp.getActiveRange().getRow()
1赞 Mike Steelson 3/13/2022
stackoverflow.com/a/70610318/15019380
1赞 TheWizEd 3/13/2022
@MikeSteelson,今天学到了一些新东西。