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

测试用excel,如图可见有两个一样的图片,但是其实是复制的两个不同文件:JAVA POI读取带有多张图片的excel时发生的问题

poi获取图片我所知道的只有一个方法,为了测试我输出图片到了本地:JAVA POI读取带有多张图片的excel时发生的问题

打印出的结果:
JAVA POI读取带有多张图片的excel时发生的问题
明明excel中有三张图片,却只打印了两张,输出到本地的图片也确实是去过重的两张。无论是改文件名还是怎么样,那两张图片永远都被视为一张。

不死心的我又拿到了他单元格的数据,单元格类型为FORMULA,但确实是三张图片:
JAVA POI读取带有多张图片的excel时发生的问题
那就奇怪了,三个单元格三张图片,怎么使用getAllPictrues方法,就只能拿到两张呢???于是,我去翻了下源码。

可以看到,这个方法获取图片的方式,是用正则表达式去匹配一个类似路径的东西,那么图片被去重应该是因为路径一样。
JAVA POI读取带有多张图片的excel时发生的问题
继续顺藤摸瓜找到这个神秘字符串"/xl/media/"出现的位置,在一番搜索后发现了端倪:
JAVA POI读取带有多张图片的excel时发生的问题
红线圈出来的,就是被封装为FakeZipEntry的图片了,也就是说,在这个时候,图片就已经被去重了!

再继续探索的过程我就不贴出来了,本想通过修改源码的方式解决这个问题,到最后发现已经超过了我能力范畴,如果各位大佬有好的解决办法请不要吝啬评论和私信,感激不尽。

相关文章:

  • 2022-01-28
  • 2021-08-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-07
猜你喜欢
  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
  • 2021-07-20
  • 2021-08-28
  • 2021-04-07
  • 2022-12-23
相关资源
相似解决方案