XLSX自定义日期格式读为String

时间:2014-10-15 08:58:59

标签: java excel apache-poi xlsx

我在单元格中使用xlsx时有这个日期:03-09-2014当我使用apache POI读取xlsx单元格时,它写道:41883.0

这就是我这样做的方式:

while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                cell.setCellType(Cell.CELL_TYPE_STRING);
                System.out.print(cell.getStringCellValue() + ";");
            }

由于我已将所有单元格转换为String类型,因此我预计日期不会变形......

任何解决方案? apache poi DataFormatter on cell containing date 这是解决方案:)

1 个答案:

答案 0 :(得分:4)

为什么呢?为什么哦为什么哦为什么你要编写代码开始?它在这么多级别上都是错误的,正如Stackoverflow上可能每三个Apache POI问题所涵盖的那样:(哦,它的explicitly advised against in the JavaDocs ......

您有两种选择。如果您想完全控制读取值,请按照instructions in the Apache POI documentation on reading cell values,编写如下代码:

for (Row row : sheet1) {
    for (Cell cell : row) {
        CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
        System.out.print(cellRef.formatAsString());
        System.out.print(" - ");

        switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                System.out.println(cell.getRichStringCellValue().getString());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    System.out.println(cell.getDateCellValue());
                } else {
                    System.out.println(cell.getNumericCellValue());
                }
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                System.out.println(cell.getBooleanCellValue());
                break;
            case Cell.CELL_TYPE_FORMULA:
                System.out.println(cell.getCellFormula());
                break;
            default:
                System.out.println();
        }
    }
}

或者,如果您只是想要#34;给我最接近的字符串,您可以在Excel"中找到此单元格的样子,那么您需要使用DataFormatter class,它提供了读取Excel格式规则应用于单元格,然后重新创建(尽可能)Java中的那些

您的代码应为:

DataFormatter fmt = new DataFormatter();

String valueAsInExcel = fmt.formatCellValue(cell);

这将根据Excel中应用的格式规则格式化数字,因此应按预期返回

最后,excel中的日期自1900年或1904年起存储为浮点数,这就是您在日期单元格中看到的数字。