POI处理Excel中各种日期格式问题

时间:2022-10-19 16:32:31

前不久写过一篇随笔《EXCEL解析之终极方法WorkbookFactory》,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种日期格式,比如下面这些:

POI处理Excel中各种日期格式问题

那么如何将这些格式正确识别并输出呢?下面来分享一下解决方法。

其实答案已经在之前已经写过。需要回到之前比较笨重的那个办法,就是在读取单元格时对单元格中数据的种类做判断,再将数据做适当转换,POI将EXCEL数据分成以下几种类型:

CELL_TYPE_NUMERIC

CELL_TYPE_STRING

CELL_TYPE_BOOLEAN

CELL_TYPE_FORMULA

CELL_TYPE_BLANK

CELL_TYPE_ERROR

POI处理Excel中各种日期格式问题

本次随笔内容主要讨论的是日期格式问题,所以要注意的是, 当type是numberic的时候,又分为数字格式和日期格式。

数字格式->如果是double类型就要读取double类型,如果是int则直接读取。使用getNumericCellValue读取数字类型。

日期格式->则需要使用POI提供的DataFormatter类的formatCellValue方法来读取日期类型单元格。

完美解决各种日期格式问题,包括中文格式日期。

运行结果如下:

POI处理Excel中各种日期格式问题

提示:在判断单元格是否为日期时,由于是对XSSFcell和HSSFcell分开读取,使用的是HSSFDataUtil类的isCellDateFormatted方法,XSSFDataUtil类没有定义这个方法,进过分析POI jar包,发现它是继承于

org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(Cell cell),于是直接使用绝对路径来指定方法,调试可以成功。

总觉得在脚本中使用这种绝对路劲比较难看,很不雅观,如果谁有更好的方法,欢迎分享,谢谢!!!