POI 读取单元格内容2种方式(数值、文本、日期、布尔、公式类型)

 1 formatCellValue()

formatter.formatCellValue()可以直接获取单元格内容。

public static String getCellValue(Cell cell,Workbook workbook){
    FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
    DataFormatter formatter = new DataFormatter();
    //单元格不设置数字格式
    cell.setCellStyle(null);
    return formatter.formatCellValue(cell,evaluator);
}

注:

(1)转化公式类型的值时会返回公式,是因为formatCellValue()只有一个cell参数,只有加上evaluator参数才能将公式类型的值变为计算结果。

(2)单元格数字太长时会自动变为科学计数法,是因为数字类型的单元格的数字格式就是科学计数法,所有要将单元格的cellStyle设为null,这样就会显示所有数字。

2 根据单元格类型获取内容 

public static String getCellValue(Cell cell,Workbook workbook){
    if(cell==null){
        return "";
    }

    if(cell.equals(CellType.STRING)){//字符串
        return cell.getRichStringCellValue().getString();
    }else if(cell.equals(CellType.NUMERIC)){//数值
        if (DateUtil.isCellDateFormatted(cell)) {//日期类型
            return cell.getDateCellValue();
        } else {//数值类型
             return cell.getNumericCellValue();
        }
    }else if(cell.equals(CellType.FORMULA)){//公式类型
        FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
        return evaluator.evaluate(cell).getNumberValue()+"";
    }else if(cell.equals(CellType.BOOLEAN)){//布尔类型
        return cell.getBooleanCellValue()? "TRUE" : "FALSE";
    }else{
        return "";
    }
    
}

猜你喜欢

转载自blog.csdn.net/qq_38974638/article/details/114101830