我有一个可以删除一个或多个命名范围的脚本。但是,在脚本完成后或给出刷新命令后,工作表都不会重新计算。我可以强制重新计算的唯一方法是在空单元格中实际插入一个新公式或更改现有公式。
我试过用justSpreadsheetApp.flush()
来触发,但如果工作表没有可见的变化,它不会导致重新计算。
这是一个缺陷还是有更明智的方法?
我有一个可以删除一个或多个命名范围的脚本。但是,在脚本完成后或给出刷新命令后,工作表都不会重新计算。我可以强制重新计算的唯一方法是在空单元格中实际插入一个新公式或更改现有公式。
我试过用justSpreadsheetApp.flush()
来触发,但如果工作表没有可见的变化,它不会导致重新计算。
这是一个缺陷还是有更明智的方法?
如果对电子表格采取的操作对任何公式都没有影响,则不会重新计算。例如,删除命名范围不会对重新计算产生影响,除非在公式中引用了该命名范围。(如果是这种情况,那么电子表格可能会因删除而损坏。)
Spreadsheet.flush()
不强制重新计算 - 它只应该将挂起的更改写入电子表格。(如果这种变化不影响公式......你明白了。)
最终结果是您只剩下您描述的解决方案;您需要更新参与计算的单元格。替换一个公式就可以了。抱歉,没有魔法咒语。
实际上,INDIRECT 跳过了依赖关系,并且总是在任何单元格更改时重新计算。因此,尽可能避免 INDIRECT 是一种很好的做法。
这就是为什么你可以通过改变一个单元格来重新计算它。
由于删除范围不会更改单元格,因此 INDIRECT 不会重新计算。