我正试图从加密的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());
}
...