自定义功能和重新计算

时间:2014-08-06 14:37:30

标签: google-apps-script google-sheets custom-function

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

有没有正确的方法(截至目前为止)在Google表格中自动重新计算自定义功能?我知道人们已经尝试添加now()作为参数,不管是否需要,都会不断重新计算。 (现在在新表中被封锁了。)有没有人找到满意的解决方案?

2 个答案:

答案 0 :(得分:2)

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

  

自定义函数参数必须为deterministic。也就是说,内置   电子表格函数,每次返回不同的结果   计算 - 例如NOW()或RAND() - 不允许作为参数   自定义功能。如果自定义函数尝试返回基于值的值   在其中一个易失性内置函数中,它将显示Loading ...   下去。

commentMogsdad到这个答案:

  

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

引用单元格

答案 1 :(得分:2)

问题:-

只有当单元格上定义的自定义函数的参数已更改或已被操纵时,电子表格单元格上的自定义脚本才会执行。如果它们保持不变,则从缓存中驱动较早的结果。

可能的解决方案:-

A)

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

  

更新的电子表格似乎不允许使用Now()或Rand()等   功能不再间接/直接传递给客户   功能。

B)

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

C)

转到您的脚本并执行一个功能。比方说updateCellValue()。现在在此处定义相同的逻辑,以更改单元格的值。

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

现在转到“编辑”->“当前项目”的触发器,并创建一个触发器,该触发器将在每个自定义的时间限制后触发您的函数(updateCellValue)。这将与解决方案B相同,但是您不必单击菜单的“刷新”按钮。

  

似乎有点骇人听闻,但也许我觉得这是到目前为止的唯一方法   更新电子表格以获取自定义功能,例如获取数据   从服务器动态地。