poi处理excel文件出现单元格样式太多的问题

前言:项目运行一段时间后,同事反馈说excel的单元格样式没有了,我心想怎么可能呢,结果把线上的文件拿出来一打开,提示恢复工作簿内容。如图:

poi处理excel文件出现单元格样式太多的问题

文件打开提示

接着点击“是”进入

poi处理excel文件出现单元格样式太多的问题

单元格样式丢失

样式全部丢失了。什么情况,马上本地写了测试的执行看看,发现当行数小于5700行(这是本人测试的,可能别人是别的行数)时,是正常的,但是一超过这个行数立马样式消失。网上百度了一下,说是我创建的style太多了,一看代码,的确是,因为我style都是在循环里面创建的。应该拿到循环外面统一创建。

poi处理excel文件出现单元格样式太多的问题

创建样式

从我截取的代码中可以看得出,我这里肯定处理的不对,造成频繁的创建style,修改办法是创建HashMap进行缓存,用到的时候在这里拿取。

poi处理excel文件出现单元格样式太多的问题

将必用的样式缓存在map中

poi处理excel文件出现单元格样式太多的问题

用时通过key来获取

修改成这样,此问题解决了。如图:

poi处理excel文件出现单元格样式太多的问题

样式不消失了

多循环些,看看数据量1w行时

poi处理excel文件出现单元格样式太多的问题

1w行

仍然没有出现问题。

总结:

  1. 因为excel不能支持太多的样式,而且项目中也没有很多样式,造成样式多,完全是因为在for循环中,创建了一些重复的样式造成的。
  2. 还有这样频繁的创建样式也造成了性能问题。