我使用的 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 ×1