NPOI 的 autoSizeColumn() 方法

1. 起因

系统中有个导出数据的功能,但测试发现当要导出的数据达到几百条的时候导出时间大概要30几秒,需要优化。

2. 排查过程

  1. 首先排除取数据导致。
  2. 先把循环赋值里面的 autoSizeColumn() 注释掉再看导出,果然秒出。

3. 原因分析

仔细看 getColumnWidth() 方法的实现,其实它在里面会遍历传入的这一行的每一行以确定其单元格宽度,取最大的作为列宽。这本来也不算什么,但是错就错在之前的 autoSizeColumn() 被放在写入每一行数据的步骤当中调用,从而导致遍历的次数成几何级增长。

于是最终的解决办法就是在把所有数据都写入之后,再对每列调一次 autoSizeColumn() 就可以了。

posted @ 2019-02-20 14:02  cos0930  阅读(1669)  评论(0)    收藏  举报