POI處理Excel中各種日期格式問題
前不久寫過一篇隨筆《EXCEL解析之終極方法WorkbookFactory》,提到使用WorkbookFactory來處理Excel檔案資料,最近發現一個問題就是這個辦法不能很好的處理各種日期格式,比如下面這些:
那麼如何將這些格式正確識別並輸出呢?下面來分享一下解決方法。
其實答案已經在之前已經寫過。需要回到之前比較笨重的那個辦法,就是在讀取單元格時對單元格中資料的種類做判斷,再將資料做適當轉換,POI將EXCEL資料分成以下幾種型別:
CELL_TYPE_NUMERIC
CELL_TYPE_STRING
CELL_TYPE_BOOLEAN
CELL_TYPE_FORMULA
CELL_TYPE_BLANK
CELL_TYPE_ERROR
本次隨筆內容主要討論的是日期格式問題,所以要注意的是, 當type是numberic的時候,又分為數字格式和日期格式。
數字格式->如果是double型別就要讀取double型別,如果是int則直接讀取。使用getNumericCellValue讀取數字型別。
日期格式->則需要使用POI提供的DataFormatter類的formatCellValue方法來讀取日期型別單元格。
完美解決各種日期格式問題,包括中文格式日期。
執行結果如下:
提示:在判斷單元格是否為日期時,由於是對XSSFcell和HSSFcell分開讀取,使用的是HSSFDataUtil類的isCellDateFormatted方法,XSSFDataUtil類沒有定義這個方法,進過分析POI jar包,發現它是繼承於
org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(Cell cell),於是直接使用絕對路徑來指定方法,除錯可以成功。
總覺得在指令碼中使用這種絕對路勁比較難看,很不雅觀,如果誰有更好的方法,歡迎分享,謝謝!!!