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 。需要特殊處理。
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 。需要特殊處理。
相關文章
- 工作疑難問題解決4例
- 解決Sql Server警報的疑難問題(轉)SQLServer
- Windows XP 系統疑難問題巧解決(轉)Windows
- Flutter 疑難雜症系列:鍵盤原理及常見問題解決方案Flutter
- 面試疑難問題面試
- 短影片系統開發疑難問題解決方案
- Homestead 使用問題及解決方式
- 近期工作遇到的問題及解決方式收藏
- maven的編碼問題、解決和疑問Maven
- 爬蟲常見問題及解決方式爬蟲
- 如何在直播中解決黑屏、花屏、閃屏問題 | 直播疑難雜症排查
- 一些常見的並且比較難解決的設計問題
- 微信小程式開發中遇到的問題及解決方式微信小程式
- Ask Tom!解決你的Oracle疑難雜症Oracle
- 在SQLServer處理中的一些問題及解決方法SQLServer
- 請blueoxgen解決疑問
- Android學習: 疑難問題總結Android
- Windows XP 安裝問題疑難解答(轉)Windows
- 深度揭祕亂碼問題背後的原因及解決方式
- 多專案管理中的難題及解決方案專案管理
- Python 疑難問題:[] 與 list() 哪個快?Python
- iOS:專案中疑難Crash問題集錦iOS
- 使用javamail發信過程中的一些問題及解決方法JavaAI
- 幽默:程式設計中困難的不是解決問題,而是確定要解決的問題 - Paul程式設計
- 疑難解決 2020-11-23
- 常見問題及解決
- 奇怪的登入問題及解決
- 難解決的記憶體洩露(OutOfMemory)問題!!!記憶體洩露
- 企業採購成本管理的難題及解決方案
- 關於 LF will be replaced by CRLF 問題的解決方式
- 通透,23 個問題 TCP 疑難雜症全解析TCP
- 一些長時間GC停頓問題的排查及解決辦法GC
- Python的Selenium一些問題解決Python
- win10怎麼進入解決疑難介面_win10系統疑難解答在哪裡Win10
- 解決兩個難懂的安全性問題(轉)
- Git常見問題及解決Git
- Harbor搭建及配置 問題解決
- 跨域問題及解決方案跨域