本帖最后由 Lynn.Dou 于 2023-5-15 15:22 编辑
问题1:recalcAll 仅是针对sheet中的公式进行的重算吗?
不仅是。
之所以该接口在sheet中设置,是因为在某些场景下(如下代码),sheet还未加入到spread中,所以此时的计算引擎只在sheet范围内作用。
- var sheet = new GC.Spread.Sheets.Worksheet();
- xxxxxxx
- sheet.recalcAll();
- spread.addSheet(0, sheet);
复制代码 而当sheet已加入spread时,sheet会将自身的calc service与spread上的calc service进行合并。
全局的calcservice将托管此类工作,计算引擎的内部就不会再区分spread级别还是sheet级别了。
也就是说,此时执行sheet.recalcAll() 实质上是对整个spread内的公式进行了重算。
(细心的小伙伴可能注意到,对于 suspendCalcService/resumeCalcService 也是有 sheet级别 和 spread级别 的,原理同上)
问题2:recalcAll 传参 true 表示什么?
API说明:传参true 表示重建所有公式引用、自定义名称和自定义函数
这里面涉及到底层的计算逻辑,举个例子:
你在单元格中输入了 =test ,但是这个自定义名称 test 还未加入到customname中,
所以此时单元格会显示 #NAME
这个时候公式已经构建完毕,后续将test加入到customname,执行重算也不会得到正确的结果。
所以此时就需要传参 true,即执行 recalcAll(true),将公式重新进行构建,并重算。
问题3:recalcAll 传参 false 表示什么?
recalcAll 传参 false 等同于 recalcAll 不传参,基于问题2,在不需要重新构建公式的情况下,可以这样使用。
|
|