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