POI-HSSF的一些疑难问题及解决方式

[b] * 图片位置无法获取[/b]

The only linkage I can find is that there is an EscherProperty called "BLIP__BLIPTODISPLAY", which is inside the EscherOptRecord of each image.
参考:
http://www.nabble.com/Copy-images-from-Workbook-to-Workbook-td23032425.html#a24303124
http://www.nabble.com/Get-image-binary-data-in-Excel-worksheet-with-known-filename-cell-location-td24413607.html

[b] * 图片 binary data index 错乱问题[/b]

这是由于 Excel 中将图片删除,其后的序列不会向前推进。于是就有了一个序列的空缺,此处还是有 BSE 的,只是 Blip 为 null。而 HSSFWorkbook 中的 getAllPictures() 中为了维护 BSE 的可用性,将 Blip 为 null 的信息过滤掉了。于是造成了 index 的混乱。
参考:
http://www.nabble.com/Get-image-binary-data-in-Excel-worksheet-with-known-filename-cell-location-td24413607.html

[b] * 图片 binary data 大量冗余[/b]

此处我改写了 PictrueData 中的 equals 方法,用以对比 blip 的 byte 数组。不过貌似不是必需的。

[b] * 为什么图片还是对不上[/b]

由于Collection的序号是从0开始,获取到的index需要-1才能对应到正确的图片。

[b] * 为什么是 blip 却没有 ancher[/b]

有可能图片属于某个 Graph Group 或者其他什么鬼东西,所以自己没有 ancher 只有 offset 。我实在 EscherContainerRecord 和 ShapeInfomation 中都增加 parent ,从 上层查找 ancher。
[b]
* WARNING: 78 bytes remaining but no space left
[/b]
这是由于 EscherAggregate.createAggregate 时从 records 里面取出的内容比 xls 中标记的长度要短。此处通常是因为在生成 chart 之后插入图片,此时丢失了这部分图片的信息。大多数情况下删除 chart 可以重新提取到这部分信息。
[b]
* Chart 插入后的结构是怎样的[/b]

可以参考本文,这是理想中的结构,可以跳过 Chart 进行解析。但很多时候并不是这样。
http://mail-archives.apache.org/mod_mbox/poi-user/200401.mbox/%3CNFBBJLHLDKIEPKFLMKJDEEICCHAA.zalewski@optonline.net%3E

[b] * 中文日期为什么会被处理为数字[/b]

设置了中文日期格式的不会,手动输入识别的会被识别成数字。因为其 DataFormat 识别码在英文 Excel中没有,分别是0x1f 和 0x39 ,而字符串分别是 0x1f 和 null 。需要特殊处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值