前言
目前我们公司项目使用该方案已实现:导出含有上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
<dependency> <groupId>top.minwk</groupId> <artifactId>excel-x</artifactId> <version>1.0.2</version> </dependency>
-
demo地址
-
导完包可以将demo中的测试代码复制到你的项目中进行测试,如自定义标题,填入文本和图片测试代码,修改对应你的图片路径就可以了。
-
多图片测试方法,你可以在idea中指定该方法执行的最大最小内存
-
只需要将搜集来的图片放在该路径下,修改数量,就可以测试大数据量的图片导出
-
支持
其中有遇到任何问题都可以在下面评论联系我,我会第一时间回复。有什么修改的建议也可以提issues哦!,好的轮子都是大家一起贡献的!