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. 还有这样频繁的创建样式也造成了性能问题。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache poi 导出excel时合并单元格可以使用setRegionStyle方法来设置合并单元格样式。这个方法接受三个参数,分别是Sheet对象、CellRangeAddress对象和CellStyle对象。在这个方法中,通过循环遍历合并单元格的每一行和每一列,然后获取对应的单元格并设置样式。具体的代码实现可以参考引用\[1\]中的示例代码。 此外,还可以使用PoiModel类来定义导出excel时的数据模型。这个类包含了内容、上一行同一位置内容、行标、列标等属性。可以根据实际需求来使用这个类。具体的代码实现可以参考引用\[2\]和引用\[3\]中的示例代码。 总结起来,Apache poi 导出excel时合并单元格的步骤包括设置合并单元格样式和定义导出数据的模型。可以根据具体的需求来使用相应的方法和类来实现导出功能。 #### 引用[.reference_title] - *1* *3* [poi 导出Excel 动态 合并单元格](https://blog.csdn.net/weixin_65436454/article/details/127806178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用POI 导出Excel 动态合并单元格](https://blog.csdn.net/weixin_41722928/article/details/112849624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值