无法使用poi从excel中读取数字类型的日期

时间:2016-01-22 04:16:22

标签: java excel apache-poi

我正在尝试使用POI读取excel文件。 第一个excel列是date(String type),第二个是string。

所以,如果我做cell.getStringCellValue()

,我的代码工作正常

但是,excel中有一个特定的行,其中两列都是数字类型。

因此我得到:

java.lang.IllegalStateException: Cannot get a text value from a numeric cell

System.out.println(dateCell.getNumericCellValue());
System.out.println(ctrCell.getNumericCellValue());

打印:

42360.0
0.3227586206896551

但在excel中,我可以将其视为:2015年12月22日和32.2758620689655%

请建议我如何从数字单元格中读取日期为12/22/2015而不是42360.0。

任何帮助都将受到高度赞赏!!

1 个答案:

答案 0 :(得分:0)

试试这个:

          Cell cell = row.getCell(colPos,Row.RETURN_BLANK_AS_NULL);
                            if (cell == null) {

                            value = "";

                            } 
                            else {

                            value = cell.toString().trim();
                            switch (cell.getCellType()) {
                            case  XSSFCell.CELL_TYPE_NUMERIC:

                            value = BigDecimal.valueOf(cell.getNumericCellValue()).toPlainString().trim();

                            if (DateUtil.isCellDateFormatted(cell)) {
                            double val = cell.getNumericCellValue();
                            Date date = DateUtil.getJavaDate(val);

                            String dateFmt = null;


                            if(cell.getCellStyle().getDataFormat()==14){
                                dateFmt = "dd/mm/yyyy";

                                value = new CellDateFormatter(dateFmt).format(date);

                            }
                            else{
                                DataFormatter fmt = new DataFormatter();
                                String valueAsInExcel = fmt.formatCellValue(cell);



                                    value = valueAsInExcel;


                            }

                    }

                            break;

                            case XSSFCell.CELL_TYPE_STRING:
                            value = cell.getStringCellValue().trim();
                            break;

                            case XSSFCell.CELL_TYPE_BLANK:
                            value = "";
                            break;

                            default:
                            break;
                            }