影落离风

The shadow falls away from the wind

0%

大量图片数据导出为excel导致内存溢出解决方案落地

前言

目前我们公司项目使用该方案已实现:导出含有上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工具,自己实现一套导出操作

  1. 导出时创建这样的文件夹和文件,将数据按照excel对应的sheet.xml格式写入sheet.xml文件
  2. 关联图片时记录图片路径在内存中,图片复制到xl\media中
  3. 文件数据读取生成后,压缩该文件为zip然后改后缀xlsx就可以了

理论存在,开始实践

  1. 先找网上有没有别人做过这样的轮子Excel支持大量图片导出
  2. 在这个轮子的基础上我进行了二次开发,拓展了一些功能,修复了一些问题

使用步骤

  1. 引入maven ,最新版本 ${version}

    1
    2
    3
    4
    5
    <dependency>
    <groupId>top.minwk</groupId>
    <artifactId>excel-x</artifactId>
    <version>${version}</version>
    </dependency>
  2. demo地址

    excel含图片导出demo地址

  3. 导完包可以将demo中的测试代码复制到你的项目中进行测试,如自定义标题,填入文本和图片测试代码,修改对应你的图片路径就可以了。

  4. 多图片测试方法,你可以在idea中指定该方法执行的最大最小内存

    1. 只需要将搜集来的图片放在该路径下,修改数量,就可以测试大数据量的图片导出

      tkdfnnj

支持

其中有遇到任何问题都可以在下面评论联系我,我会第一时间回复。有什么修改的建议也可以提issues哦!,好的轮子都是大家一起贡献的!

源码地址

图片资源

参考