`

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

    博客分类:
  • Java
阅读更多
    * 图片位置无法获取

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

    * 图片 binary data index 错乱问题

这是由于 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

    * 图片 binary data 大量冗余

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

    * 为什么图片还是对不上

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

    * 为什么是 blip 却没有 ancher

有可能图片属于某个 Graph Group 或者其他什么鬼东西,所以自己没有 ancher 只有 offset 。我实在 EscherContainerRecord 和 ShapeInfomation 中都增加 parent ,从 上层查找 ancher。

    * WARNING: 78 bytes remaining but no space left

这是由于 EscherAggregate.createAggregate 时从 records 里面取出的内容比 xls 中标记的长度要短。此处通常是因为在生成 chart 之后插入图片,此时丢失了这部分图片的信息。大多数情况下删除 chart 可以重新提取到这部分信息。

    * Chart 插入后的结构是怎样的


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

    * 中文日期为什么会被处理为数字

设置了中文日期格式的不会,手动输入识别的会被识别成数字。因为其 DataFormat 识别码在英文 Excel中没有,分别是0x1f 和 0x39 ,而字符串分别是 0x1f 和 null 。需要特殊处理。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics