前言
目前我们公司项目使用该方案已实现:导出含有上G图片数据的excel,内存占用在60~70mb。这也是这个博客实现的目标。
如果你现在遇到导出excel含图片有多大磁盘占用,就会有多大的内存占用问题,那你就来对地方了!
继续接着前面的问题研究 大数据量excel含图片导出解决方案
前面说使用分页导出解决,但是对于客户使用体验来说,也是很麻烦。查一条记录可能还得打开多个excel,所以能放在一个excel里对客户来说还是很舒服的。
那就还是之前的问题,使用SXSSFWorkbook窗口操作图片没缓存在磁盘上,进行大量图片导出时始终占用着内存。
excel简介
excel本质上就是一堆文件的zip压缩包,你可以手动把excel文件的后缀改成zip就知道了。
数据路径 xl\worksheets\sheet1.xml
图片路径 xl\media
图片样式和索引 xl\drawings\drawing1.xml
想法
在做图片导出时替换SXSSFWorkbook工具,自己实现一套导出操作
- 导出时创建这样的文件夹和文件,将数据按照excel对应的sheet.xml格式写入sheet.xml文件
- 关联图片时记录图片路径在内存中,图片复制到xl\media中
- 文件数据读取生成后,压缩该文件为zip然后改后缀xlsx就可以了
理论存在,开始实践
- 先找网上有没有别人做过这样的轮子Excel支持大量图片导出
- 在这个轮子的基础上我进行了二次开发,拓展了一些功能,修复了一些问题
使用步骤
引入maven ,最新版本 ${version}
1
2
3
4
5<dependency>
<groupId>top.minwk</groupId>
<artifactId>excel-x</artifactId>
<version>${version}</version>
</dependency>demo地址
导完包可以将demo中的测试代码复制到你的项目中进行测试,如自定义标题,填入文本和图片测试代码,修改对应你的图片路径就可以了。
多图片测试方法,你可以在idea中指定该方法执行的最大最小内存
只需要将搜集来的图片放在该路径下,修改数量,就可以测试大数据量的图片导出
支持
其中有遇到任何问题都可以在下面评论联系我,我会第一时间回复。有什么修改的建议也可以提issues哦!,好的轮子都是大家一起贡献的!