POI通過getDateCellValue讀取日期

2021-07-24 23:37:54 字數 826 閱讀 6947

寫這篇文章的由來:1.遇到了這個問題  2.通過搜尋沒有合適的解決方案  3.筆者發現了問題的根源,下面進入正題:

近期在使用poi解析excel日期單元格時出現了乙個問題,通過getdatecellvalue獲取到的時間不對:都是2023年的日期,可筆者已經將日期單元格格式設定為日期格式,為什麼讀取時間不對呢?

最終發現是excel自身的問題,經過跟蹤獲取了該單元格以下資料:

t="s"xmlns:r="" xmlns:xdr="" xmlns:x14="" xmlns:mc="" xmlns:main="">20

正確的是

42685

相信大家可以看到區別了:產生問題的根源在於雖然設定了該excel單元格為日期格式,而且跟蹤除錯,發現poi讀取該單元格的cellstyle呼叫getdataformatstring方法返回結果為[$-17804]yyyy/m/d;@,但是最奇怪的地方在於通過getcelltype獲取該單元格的格式卻是:hssfcell.cell_type_string

謎底揭開:雖然我們通過office設定該單元格為日期格式,但是該單元格格式依然是hssfcell.cell_type_string(字串)格式,所以通過getdatecellvalue獲取到的日期不對,筆者還發現:在日期單元格按下回車鍵後,該單元格由最初的左對齊(字串預設對齊方式)變為右對齊(日期預設對齊方式),變為右對齊後再通過getdatecellvalue就能獲取到正確的日期,這算是poi與excel相容不太好的地方

推薦閱讀:

學習java通過poi上傳excel檔案

近期接了乙個小功能,需要用到excel匯入匯出功能,學習了一下apache的poi技術,現做如下筆記 傳統的通過form表單提交上傳檔案的寫法 使用ocupload方法 在body中新增乙個按鈕 為按鈕繫結事件 在服務端接收檔案 在對應的處理的類中建立乙個file物件及其set方法。注意前後端的檔案...

通過Excel模板進行POI匯出excel資料

需要滿足匯出的excel資料能夠匯入到專案中,目前通過poi對excel模板進行讀取,然後在進行寫入資料,最後實現匯出功能。啥也不說 上 轉殖模板中的workbook 主方法 填充資料 可以 裝入map中 獲取資料 資料1 office office userutils.getcurrentorga...

poi知識積累

匯出需要的頭 response.setcontenttype octets stream charset utf 8 需要匯出的 型別都是可以在tomcat conf下的web.xml中找到 response.setheader content disposition attachment file...