6

我有一个自定义函数,它接受三个范围名称作为输入参数。当这些范围内的单元格值发生变化时,函数输出保持不变。这是平台的“功能”。

是否有任何适当的方法(到目前为止)使 Google 表格中的自定义函数动态重新计算?我知道人们曾尝试将其添加now()为参数,该参数用于不断地重新计算而不管需要。(现在被新床单挡住了。)有没有人找到满意的解决方案?

4

2 回答 2

5

使自定义函数重新计算的正确方法是更改​​它的参数。关于使用 NOW() 和其他类似的内置函数作为自定义函数的参数,来自Google Sheets 中的自定义函数

自定义函数参数必须是确定性的。也就是说,每次计算时返回不同结果的内置电子表格函数(例如 NOW() 或 RAND())不允许作为自定义函数的参数。如果自定义函数尝试基于这些 volatile 内置函数之一返回值,它将无限期地显示 Loading...。

Mogsdad的评论到这个答案:

实际上,这将显示 #ERROR! 而不是“正在加载...”,此函数不允许使用 NOW()、RAND() 或 RANDBETWEEN() 引用单元格

于 2015-04-27T21:31:42.387 回答
4

问题:-

电子表格单元格上的自定义脚本只会在单元格上定义的自定义函数的参数发生更改或被操作时自行执行。如果它们保持相同,则从缓存中驱动较早的结果。

可能的解决方案:-

一个)

显然,您可以在任何单元格上使用 Now(),然后将该单元格传递给您的函数参数。确保每分钟更改电子表格设置 -> 计算 -> onchange。(这将每分钟更改一次函数的参数,因此脚本将被执行)

更新后的电子表格似乎不再允许 Now() 或 Rand() 或此类函数间接/直接传递给自定义函数。

二)

添加一个“刷新”菜单项,并可能转到您的脚本并定义一个函数,当您单击“刷新”菜单时该函数会更改单元格的值。将该值作为参数传递给执行脚本的函数。

C)

转到您的脚本并创建一个函数。假设 updateCellValue()。现在在这里定义相同的逻辑,旨在更改单元格的值。

例子:SpreadsheetApp.getActiveSpreadsheet().getRange('A1').setValue(new Date().toTimeString());

现在转到 Edit->Current Project 的触发器并创建一个触发器,该触发器将在每个自定义时间限制后触发您的函数 (updateCellValue)。这将与解决方案 B 执行相同的操作,但您不必单击菜单的刷新按钮。

似乎有点 hack,但可能我觉得这是目前为自定义功能更新电子表格的唯一方法,例如从服务器动态获取数据。

于 2019-09-09T09:45:36.490 回答