前不久写过一篇随笔《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),于是直接使用绝对路径来指定方法,调试可以成功。
总觉得在脚本中使用这种绝对路劲比较难看,很不雅观,如果谁有更好的方法,欢迎分享,谢谢!!!