本帖最后由 BND 于 2024-5-25 11:51 编辑
接着说到设置脏标。
workbook.setDeferUpdateDirtyState(true);
setFormulas(columnArray);
workbook.setDeferUpdateDirtyState(false);
getTableValue(table);
以上代码:
启用迭代计算, 设置公式与获取值耗时如下图, 设置公式很耗时。
禁用迭代计算, 设置公式与获取值耗时如下图, 设置公式耗时显著减少,但获取值耗时又增加了。
整体对比下来,禁用迭代计算,性能有提升,但还是不满足业务需求。
附件《gcexceldemo2.rar》为测试demo程序。
我们实际业务场景:Excel模板插入80列以上的Table,加载1000行左右的数据,其中60多列设置Excel公式进行运算,公式引用来自20多个页签的数据,页签数据在1000行~10000行不等。
这个场景,我们业务要求整个计算过程耗时不超过5秒。
实际测得各种方案的耗时:
1、启用/禁用迭代计算,禁用计算引擎,设置公式,开启计算引擎,重算,获取值,整体耗时40~50秒,绝大部分耗时发生在重算。
2、启用迭代计算,设置脏标延迟更新,设置公式,关闭脏标延迟更新,获取值,整体耗时40~60分钟,绝大部分耗时发生在设置公式。
3、禁用迭代计算,设置脏标延迟更新,设置公式,关闭脏标延迟更新,获取值,整体耗时40~50秒,绝大部分耗时发生在获取值。
对比下来,方案3比方案2有很大提升,但跟方案1在耗时上没啥区别,方案3主要耗时就发生获取值这一步。
麻烦支持,提供优化方案。
|
|