小编use*_*353的帖子

apache poi 从 excel date() 函数读取日期给出了错误的日期

我使用的 xlsx 文件包含DATE(year, month, day)单元格内的公式。该单元格的格式为日期,因此 Excel/OpenOffice 显示正确的日期。例如,细胞内容'=DATE(2013;1;1)'产生:'01.01.2013' 到目前为止 - 很好。

当使用 poi 库读取此文件时,我会执行以下操作:

XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File("/home/detlef/temp/test.xlsx")));
XSSFSheet sheet = workbook.getSheet("Sheet A");
XSSFCell cell = sheet.getRow(0).getCell(0);
System.out.println(cell.getDateCellValue());
Run Code Online (Sandbox Code Playgroud)

这将打印出:

Sun Dec 31 00:00:00 CET 1899
Run Code Online (Sandbox Code Playgroud)

我使用的是 POI 3.9。

谁能告诉我为什么会发生这种情况?

找到了一种方法来做到这一点:

if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
   FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
   CellValue evaluate = evaluator.evaluate(cell);
   Date date = DateUtil.getJavaDate(evaluate.getNumberValue());
   System.out.println(date);
}
Run Code Online (Sandbox Code Playgroud)

这会产生:

Tue Jan 01 00:00:00 CET 2013
Run Code Online (Sandbox Code Playgroud)

不管怎么说,还是要谢谢你。

apache-poi

2
推荐指数
1
解决办法
2392
查看次数

标签 统计

apache-poi ×1