【发布时间】:2013-11-30 11:14:40
【问题描述】:
我正在尝试编写一个将单元格内容复制到其他单元格的 GAS 电子表格自定义函数。我不仅需要使用源单元格的数据填充目标单元格,还需要使用其公式内容(如果有的话)。
现在,我已经知道通过自定义函数这基本上是不可能的,因为它们总是接收单元格计算的结果而不是单元格公式本身,而且它们也无法返回目标单元格的公式。
另一方面,有一些函数可以读取和写入单元格公式,例如Range.getFormula() 和 Range.setFormula() 这似乎使我的努力成为可能。我只需要找到另一种方式来称呼他们。 更新:同时我发现自定义公式实际上可以使用getFormula()读取公式,但他们绝对没有写入公式的权限使用setFormula() 进入单元格。
我的问题是……
创建与读取和写入单元格公式内容的自定义函数等效的东西的最优雅的方法是什么?我想我可以使用 onEdit 函数在每次电子表格编辑后更新我的目标单元格,但这意味着我必须对目标单元格范围的坐标进行硬编码,这看起来很hacky并且每次目标范围都需要更改代码被移动(例如,当在其上方插入行时)。
更新:示例
一个例子是一个自定义函数,它能够读取多个单元格范围(每个范围作为一个不同的函数参数给出)并返回一个连接的单元格范围。
=rangeJoin(A1:B10;D1:E15)
...将读取大小为 2x10 和 2x15 的两个范围,并将使用两个范围的后续单元格内容填充大小为 2x25 的目标范围。目标范围将从包含 rangeJoin 的单元格开始,向右扩展 2 个单元格,向下扩展 25 个单元格(与自定义函数一样)。自定义函数(或类似机制)应该能够复制公式,因此包含=hyperlink("http://www.google.com";"Google") 的单元格应该作为超链接出现在目标范围内,而不是作为带有裸词“Google”的文本单元格。
【问题讨论】:
-
一个小的弹出式 UI 会要求您选择目标范围怎么样?这对你的情况有用吗?该功能可以通过按钮或菜单调用,甚至可以在每次编辑时调用。让我们知道您的想法。:-)
-
嗨@Sergeinsas,老实说,我希望有一个更简化的解决方案,它仍然能够通过单元格中的某种标记来确定原点和目标范围。
-
当然有!但是在您的问题中尚不清楚源和目标之间的这种关系实际上是什么。你能具体解释一下吗?您还提到它可能会改变...请澄清
-
嗨@Sergeinsas,我在我的 OP 中添加了一个示例,应该解释我试图实现的目标。
-
非常类似于Google Apps Script to VMerge tables WITH FORMATTING。您可以做的最好的事情是使用定时功能来查看合并范围、查找和复制公式。伊克。
标签: google-apps-script google-sheets formulas custom-function