use*_*636 6 google-sheets google-apps-script custom-function
我有一个自定义函数,它接受三个范围名称作为输入参数。当这些范围内的单元格值发生变化时,函数输出保持不变。这是平台的“功能”。
是否有任何正确的方法(到目前为止)使 Google Sheets 中的自定义函数动态重新计算?我知道人们曾尝试将添加now()
作为参数,该参数过去会根据需要不断重新计算。(现在被新的床单挡住了。)有没有人找到满意的解决方案?
使自定义函数重新计算的正确方法是更改它的参数。关于使用 NOW() 和其他类似的内置函数作为自定义函数的参数,来自Google Sheets 中的自定义函数
自定义函数参数必须是确定性的。也就是说,每次计算都返回不同结果的内置电子表格函数(例如 NOW() 或 RAND())不允许作为自定义函数的参数。如果自定义函数尝试根据这些易变的内置函数之一返回一个值,它将无限期地显示 Loading...。
实际上,不是“正在加载...”,这将显示#ERROR!,此函数不允许使用 NOW()、RAND() 或 RANDBETWEEN() 引用单元格
小智 5
问题:-
仅当单元格上定义的自定义函数的参数已更改或已被操作时,电子表格单元格上的自定义脚本才会自行执行。如果它们保持相同,则从缓存中驱动较早的结果。
可能的解决方案:-
A)
显然,您可以在任何单元格上使用 Now() ,然后将该单元格传递给函数参数。确保每分钟更改电子表格设置 -> 计算 -> onchange。(这将每分钟更改函数的参数,从而执行脚本)
更新的电子表格似乎不再允许 Now() 或 Rand() 或此类函数间接/直接传递给自定义函数。
二)
添加“刷新”菜单项,也许可以转到脚本并定义一个函数,该函数在单击“刷新”菜单时更改单元格的值。将该值作为参数传递给正在执行脚本的函数。
C)
转到您的脚本并创建一个函数。比方说 updateCellValue()。现在在这里定义相同的逻辑,旨在更改单元格的值。
例子:SpreadsheetApp.getActiveSpreadsheet().getRange('A1').setValue(new Date().toTimeString());
现在转到“编辑”->“当前项目”的触发器并创建一个触发器,该触发器将在每个自定义定义的时间限制后触发您的函数 (updateCellValue)。这将执行与解决方案 B 相同的操作,但您不必单击菜单的“刷新”按钮。
看起来有点像黑客,但可能我觉得这是目前更新电子表格以实现自定义功能(例如从服务器动态获取数据)的唯一方法。
归档时间: |
|
查看次数: |
4000 次 |
最近记录: |