Apache POI错误地打印按时间自动格式化的单元格



我正试图从加密的Excel工作簿打印出单元格。单元格包含一个时间,当我尝试打印cell.getNumericCellValue()时,结果是一个随机数,这似乎取决于单元格内的时间,在这种情况下是0.5208333333333334。当我尝试只是打印单元格时,结果总是这个日期:31-Dez.-1899,独立于单元格内的时间。下面是Excel表格中的单元格:截图

我使用的是Windows 11, Eclipse版本:2021-12 (4.22.0),JDK版本:JDK -17.0.2

这是执行的代码:

XSSFWorkbook wb = null;

try (FileInputStream fis = new FileInputStream(excelFilePath);){
wb = ((XSSFWorkbook)WorkbookFactory.create(fis, password));
} catch (IOException | EncryptedDocumentException e) {
e.printStackTrace();
}

XSSFSheet sheet = wb.getSheetAt(0);

XSSFCell cell = sheet.getRow(1).getCell(1);

System.out.println(cell); // results in 31-Dez.-1899
System.out.println(cell.getNumericCellValue()); // results in 0.5208333333333334

要以与Excel工作表相同的格式获取String的单元格值,请使用DataFormatter,如下所示:

Java POI:如何读取Excel单元格值而不是公式计算它?

代码摘录:

...
DataFormatter dataFormatter = new DataFormatter(new java.util.Locale("en", "US"));
...
String value = dataFormatter.formatCellValue(cell);
...

或者,如果需要日期单元格值,则获取日期单元格值而不是数值单元格值,如https://poi.apache.org/components/spreadsheet/quick-guide.html#CellContents:

所示。
import org.apache.poi.ss.usermodel.CellType;
...
switch (cell.getCellType()) {
...
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.println(cell.getDateCellValue());
} else {
System.out.println(cell.getNumericCellValue());
}
...

最新更新