我有一个自定义函数,它接受三个范围名称作为输入参数。当这些范围内的单元格值发生变化时,函数输出保持不变。这是一个"功能"平台。
有没有正确的方法(截至目前为止)在Google表格中自动重新计算自定义功能?我知道人们已经尝试添加now()
作为参数,不管是否需要,都会不断重新计算。 (现在在新表中被封锁了。)有没有人找到满意的解决方案?
答案 0 :(得分:2)
使自定义函数重新计算的正确方法是更改它的参数。关于使用NOW()和其他类似的内置函数作为自定义函数的参数,来自Custom functions in Google Sheets
自定义函数参数必须为deterministic。也就是说,内置 电子表格函数,每次返回不同的结果 计算 - 例如NOW()或RAND() - 不允许作为参数 自定义功能。如果自定义函数尝试返回基于值的值 在其中一个易失性内置函数中,它将显示Loading ... 下去。
实际上,不是“正在加载......”,而是显示#ERROR !,此函数不允许使用NOW(),RAND()或RANDBETWEEN()
引用单元格
答案 1 :(得分:2)
问题:-
只有当单元格上定义的自定义函数的参数已更改或已被操纵时,电子表格单元格上的自定义脚本才会执行。如果它们保持不变,则从缓存中驱动较早的结果。
可能的解决方案:-
A)
很显然,您可以在任何单元格上使用Now(),然后将该单元格传递给您的功能参数。确保每分钟更改电子表格设置->计算-> onchange。 (这将每分钟更改函数的参数,因此将执行脚本)
更新的电子表格似乎不允许使用Now()或Rand()等 功能不再间接/直接传递给客户 功能。
B)
添加一个“刷新”菜单项,然后转到脚本并定义一个函数,当您单击“刷新”菜单时,该函数会更改单元格的值。将值作为参数传递给执行脚本的函数。
C)
转到您的脚本并执行一个功能。比方说updateCellValue()。现在在此处定义相同的逻辑,以更改单元格的值。
示例:SpreadsheetApp.getActiveSpreadsheet().getRange('A1').setValue(new Date().toTimeString());
现在转到“编辑”->“当前项目”的触发器,并创建一个触发器,该触发器将在每个自定义的时间限制后触发您的函数(updateCellValue)。这将与解决方案B相同,但是您不必单击菜单的“刷新”按钮。
似乎有点骇人听闻,但也许我觉得这是到目前为止的唯一方法 更新电子表格以获取自定义功能,例如获取数据 从服务器动态地。