业务场景:读取excel数据,该excel中每行都会有图片,各个图片可以重复,现在需要拿到每行对应的图片。

测试用excel,如图可见有两个一样的图片,但是其实是复制的两个不同文件:

poi获取图片我所知道的只有一个方法,为了测试我输出图片到了本地:

打印出的结果:

明明excel中有三张图片,却只打印了两张,输出到本地的图片也确实是去过重的两张。无论是改文件名还是怎么样,那两张图片永远都被视为一张。

不死心的我又拿到了他单元格的数据,单元格类型为FORMULA,但确实是三张图片:

那就奇怪了,三个单元格三张图片,怎么使用getAllPictrues方法,就只能拿到两张呢???于是,我去翻了下源码。

可以看到,这个方法获取图片的方式,是用正则表达式去匹配一个类似路径的东西,那么图片被去重应该是因为路径一样。

继续顺藤摸瓜找到这个神秘字符串"/xl/media/"出现的位置,在一番搜索后发现了端倪:

红线圈出来的,就是被封装为FakeZipEntry的图片了,也就是说,在这个时候,图片就已经被去重了!

之后探索的过程发现,之所以POI能读取excel中的图片,其原理是基于java.util.zip的压缩文件读取功能,如果你去把excel文件的后缀强转为.zip的话,再去解压缩,就会发现xl/media的文件夹,然后图片其实在excel中就已经被去重了,所以这个问题是个无解的问题!

JAVA POI读取带有多张图片的excel时发生的问题相关推荐

  1. java poi 读取excel 编码_Java使用POI 读取和写入Excel指南

    做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求:网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0. ...

  2. java poi读取excel报错Your InputStream was neither an OLE2 stream, nor an OOXML stream

    错误描述 java poi读取excel报错Your InputStream was neither an OLE2 stream, nor an OOXML stream 楼主是读取的另存为的exc ...

  3. Java Poi 读取 Excel2007 自定义属性

    Java Poi 读取 Excel2007 自定义属性 最近做的项目中有个需求识别上传的excel模板做不同的导入操作.想到在模板自定义属性中设置模板类型.java读取模板类型,判断是上传的哪个模板. ...

  4. Java poi读取,写入Excel2003

    Java poi读取,写入Excel2003 相关阅读: poi读写Excel2007:http://www.cnblogs.com/gavinYang/p/3576741.html jxl读写exc ...

  5. java POI 读取Excel文件 将图片、表格生成到PPT

    临时有个需求,要求通过读取EXCEL文件,然后通过文件名称去给定的文件夹内查找图片,并将图片写入PPT中,详情以表格的形式写到图片右侧,每张图片一页PPT.效果如图所示: 用到的jar包如下(mave ...

  6. java poi读取excel文件(xlsx)

    读取excel文件的方法有许多种,这篇文章主要描述通过poi读取excel文件. 先maven导入jar包 <dependency><groupId>org.apache.po ...

  7. 使用Java POI读取excel文档

    Java使用POI读取excel文档教程 一:Poi的介绍 1.简介 1.由apache公司提供 2.Java编写的免费开源的跨平台的Java API 3.提供API给Java程序对Microsoft ...

  8. java poi 读取excel 图片_Poi读取excel插图的方法和操作步骤

    我们在使用Excel制作表格的时候,有时会使用"Poi读取excel插图",但是很多初学者都不懂也不会制作.下面,我就给大家讲一下"Poi读取excel插图"的 ...

  9. 1. Java POI 读取、写入Excel(包括样式)的工具类Utils

    在工作中经常会遇到操作excel的需求,对于格式简单.统一的excel可以选择EasyExcel来实现功能,很简单方便:而对于复杂的excel文件,如有各式各样的合并单元格.表头不固定.行列跟随业务数 ...

最新文章

  1. myeclipse下拷贝的项目,tomcat下部署名称和导出为war包的名称默认值修改
  2. Linux4.4 TCP源码分析
  3. zabbix_agent自动部署安装
  4. 微软发布用于Serverless架构的Azure API Management
  5. 配置HDFS HttpFS和WebHDFS
  6. 设置RDLC中table控件的表头在每页显示
  7. 2个vector如何合成一个_面试中如何做到不卑不亢,牢记2个要点
  8. sql 存储过程返回值 变量名
  9. VS Code编译C/C++
  10. 针对vue ui启动项目抛error
  11. php数据库字段设置长度,javascript - 表单字符长度与数据库字段长度
  12. 【图像处理】MATLAB:点、线、边缘检测
  13. uvalive3983Robtruck
  14. 检测磁盘smartmontools
  15. 国家码信道顺从表(含数据库和配置)
  16. 新一轮的XNA学习开始
  17. 通过iis启动服务,会产生C:/inetpub/logs/logsFile产生大量的日志,定期清理
  18. cadence修改板框倒角_Allegro软件中如何对板框进行倒角及倒角不成功解决方法
  19. 如何让两台电脑共享一套鼠标和键盘
  20. MySQL--存储过程、局部变量与用户变量[@](初步认识)

热门文章

  1. ionic 3 安卓手机获取经纬度坐标
  2. 2021年A特种设备相关管理(锅炉压力容器压力管道)考试报名及A特种设备相关管理(锅炉压力容器压力管道)免费试题
  3. 分类又叫类目或者类别
  4. DEJA_VU3D - Cesium功能集 之 052-模拟卫星轨道(高空)效果
  5. 用友服务器显示重启,用友重启远程服务器
  6. java ts_TS与JAVA相互调用(TS篇)
  7. [龙讯增刊2号]龙芯能干啥?
  8. 如何选择适合你的兴趣爱好(四十四),武当
  9. 华文慕课北大操作系统陈向群第五章课后习题解析
  10. 用插件登录wow为什么显示服务器不兼容,《魔兽世界》显示游戏设备驱动不兼容的解决方法...