我正在尝试编写一个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”字样的文本单元格出现。
答案 0 :(得分:2)
同意“Mogsdad”
即。这个自定义功能有效:
function myGrid() {
return [[1,2],[3,"http://www.google.com"]];
}
但是,自定义函数无法将公式写入工作表。见https://developers.google.com/apps-script/execution_custom_functions#permissions
作为一种解决方法,您可以使用“触发器”,例如基于时间的触发器,如“Mogsdad”所暗示的那样。