NPOI 的 autoSizeColumn() 方法
1. 起因
系统中有个导出数据的功能,但测试发现当要导出的数据达到几百条的时候导出时间大概要30几秒,需要优化。
2. 排查过程
- 首先排除取数据导致。
- 先把循环赋值里面的
autoSizeColumn()注释掉再看导出,果然秒出。
3. 原因分析
仔细看 getColumnWidth() 方法的实现,其实它在里面会遍历传入的这一行的每一行以确定其单元格宽度,取最大的作为列宽。这本来也不算什么,但是错就错在之前的 autoSizeColumn() 被放在写入每一行数据的步骤当中调用,从而导致遍历的次数成几何级增长。
于是最终的解决办法就是在把所有数据都写入之后,再对每列调一次 autoSizeColumn() 就可以了。
浙公网安备 33010602011771号