JAVA POI读取带有多张图片的excel时发生的问题
业务场景:读取excel数据,该excel中每行都会有图片,各个图片可以重复,现在需要拿到每行对应的图片。
测试用excel,如图可见有两个一样的图片,但是其实是复制的两个不同文件:
poi获取图片我所知道的只有一个方法,为了测试我输出图片到了本地:
打印出的结果:
明明excel中有三张图片,却只打印了两张,输出到本地的图片也确实是去过重的两张。无论是改文件名还是怎么样,那两张图片永远都被视为一张。
不死心的我又拿到了他单元格的数据,单元格类型为FORMULA,但确实是三张图片:
那就奇怪了,三个单元格三张图片,怎么使用getAllPictrues方法,就只能拿到两张呢???于是,我去翻了下源码。
可以看到,这个方法获取图片的方式,是用正则表达式去匹配一个类似路径的东西,那么图片被去重应该是因为路径一样。
继续顺藤摸瓜找到这个神秘字符串"/xl/media/"出现的位置,在一番搜索后发现了端倪:
红线圈出来的,就是被封装为FakeZipEntry的图片了,也就是说,在这个时候,图片就已经被去重了!
之后探索的过程发现,之所以POI能读取excel中的图片,其原理是基于java.util.zip的压缩文件读取功能,如果你去把excel文件的后缀强转为.zip的话,再去解压缩,就会发现xl/media的文件夹,然后图片其实在excel中就已经被去重了,所以这个问题是个无解的问题!
JAVA POI读取带有多张图片的excel时发生的问题相关推荐
- java poi 读取excel 编码_Java使用POI 读取和写入Excel指南
做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求:网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0. ...
- 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 ...
- Java Poi 读取 Excel2007 自定义属性
Java Poi 读取 Excel2007 自定义属性 最近做的项目中有个需求识别上传的excel模板做不同的导入操作.想到在模板自定义属性中设置模板类型.java读取模板类型,判断是上传的哪个模板. ...
- Java poi读取,写入Excel2003
Java poi读取,写入Excel2003 相关阅读: poi读写Excel2007:http://www.cnblogs.com/gavinYang/p/3576741.html jxl读写exc ...
- java POI 读取Excel文件 将图片、表格生成到PPT
临时有个需求,要求通过读取EXCEL文件,然后通过文件名称去给定的文件夹内查找图片,并将图片写入PPT中,详情以表格的形式写到图片右侧,每张图片一页PPT.效果如图所示: 用到的jar包如下(mave ...
- java poi读取excel文件(xlsx)
读取excel文件的方法有许多种,这篇文章主要描述通过poi读取excel文件. 先maven导入jar包 <dependency><groupId>org.apache.po ...
- 使用Java POI读取excel文档
Java使用POI读取excel文档教程 一:Poi的介绍 1.简介 1.由apache公司提供 2.Java编写的免费开源的跨平台的Java API 3.提供API给Java程序对Microsoft ...
- java poi 读取excel 图片_Poi读取excel插图的方法和操作步骤
我们在使用Excel制作表格的时候,有时会使用"Poi读取excel插图",但是很多初学者都不懂也不会制作.下面,我就给大家讲一下"Poi读取excel插图"的 ...
- 1. Java POI 读取、写入Excel(包括样式)的工具类Utils
在工作中经常会遇到操作excel的需求,对于格式简单.统一的excel可以选择EasyExcel来实现功能,很简单方便:而对于复杂的excel文件,如有各式各样的合并单元格.表头不固定.行列跟随业务数 ...
最新文章
- myeclipse下拷贝的项目,tomcat下部署名称和导出为war包的名称默认值修改
- Linux4.4 TCP源码分析
- zabbix_agent自动部署安装
- 微软发布用于Serverless架构的Azure API Management
- 配置HDFS HttpFS和WebHDFS
- 设置RDLC中table控件的表头在每页显示
- 2个vector如何合成一个_面试中如何做到不卑不亢,牢记2个要点
- sql 存储过程返回值 变量名
- VS Code编译C/C++
- 针对vue ui启动项目抛error
- php数据库字段设置长度,javascript - 表单字符长度与数据库字段长度
- 【图像处理】MATLAB:点、线、边缘检测
- uvalive3983Robtruck
- 检测磁盘smartmontools
- 国家码信道顺从表(含数据库和配置)
- 新一轮的XNA学习开始
- 通过iis启动服务,会产生C:/inetpub/logs/logsFile产生大量的日志,定期清理
- cadence修改板框倒角_Allegro软件中如何对板框进行倒角及倒角不成功解决方法
- 如何让两台电脑共享一套鼠标和键盘
- MySQL--存储过程、局部变量与用户变量[@](初步认识)
热门文章
- ionic 3 安卓手机获取经纬度坐标
- 2021年A特种设备相关管理(锅炉压力容器压力管道)考试报名及A特种设备相关管理(锅炉压力容器压力管道)免费试题
- 分类又叫类目或者类别
- DEJA_VU3D - Cesium功能集 之 052-模拟卫星轨道(高空)效果
- 用友服务器显示重启,用友重启远程服务器
- java ts_TS与JAVA相互调用(TS篇)
- [龙讯增刊2号]龙芯能干啥?
- 如何选择适合你的兴趣爱好(四十四),武当
- 华文慕课北大操作系统陈向群第五章课后习题解析
- 用插件登录wow为什么显示服务器不兼容,《魔兽世界》显示游戏设备驱动不兼容的解决方法...