欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

POI表格读取,实现了对日期和数值的自动判断

程序员文章站 2024-02-24 14:39:52
...

表格读取,实现了对日期和数值的自动判断,由于这是,框架自带的bug,通过查看其源码,发现给文件设置格式可以解决问题,所以在表格模板文件里面给日期列设置了格式,解决了这个难题
要实现自动判断,需要做两个工作,一个是给日期列添加格式,选中某一列,右击,设置单元格格式,默认的是数字标签,下边有一个分类,点击日期并选择英文日期格式。然后就可以在代码里边这样判断:HSSFDateUtil.isCellDateFormatted(cell)


    private static String getCellValue(XSSFCell cell)
    {
//        DecimalFormat df = new DecimalFormat("#.#");
        String cellValue = null;
        if (cell == null) return null;
        switch (cell.getCellType())
        {
            case HSSFCell.CELL_TYPE_NUMERIC :
                if (HSSFDateUtil.isCellDateFormatted(cell))
                {
//                    需要对日期这一列进行设置样式,否则无法识别是日期类型还是数值类型
//                    默认不支持中文日期类型,需要设置成纯英语日期类型,不要包含年月日等汉字
//                    最好是使用这种格式 2019/10/10 0:00
                    SimpleDateFormat sdf = new SimpleDateFormat(
                            "yyyy-MM-dd HH:mm:ss");
                    cellValue = sdf.format(HSSFDateUtil.getJavaDate(cell
                            .getNumericCellValue()));
                    break;
                }
//                cellValue = df.format(cell.getNumericCellValue());
                String v=String.format("%.4f",cell.getNumericCellValue());      //默认的整数后边是一个小数点,和一个零
                cellValue=(v).replaceAll("\\.0*$","");//整数作为浮点数格式化以后,删除结尾的点零
                break;
            case HSSFCell.CELL_TYPE_STRING :
                cellValue = String.valueOf(cell.getStringCellValue());
                break;
            case HSSFCell.CELL_TYPE_FORMULA ://XSSFCell.getCTCell()
                cellValue = cell.getCTCell().getV();//.getCachedFormulaResultType();//String.valueOf(cell..getCellFormula());
                break;
            case HSSFCell.CELL_TYPE_BLANK :
                cellValue = null;
                break;
            case HSSFCell.CELL_TYPE_BOOLEAN :
                cellValue = String.valueOf(cell.getBooleanCellValue());
                break;
            case HSSFCell.CELL_TYPE_ERROR :
                cellValue = String.valueOf(cell.getErrorCellValue());
                break;
        }
        if (cellValue != null && cellValue.trim().length() <= 0)
        {
            cellValue = null;
        }
        return cellValue;
    }