java使用POI遇到公式解决方法FormulaEvaluator
记录一下:
在3.8版本前使用xls计算公式正常逻辑,我们写一个判断:
case FORMULA:
try {
Double numericCellValue = cell.getNumericCellValue();
BigDecimal bd2 = new BigDecimal(numericCellValue.toString());
bd2.toPlainString();
cellValue = String.valueOf(bd2.setScale(2, BigDecimal.ROUND_HALF_UP));
} catch (IllegalStateException e) {
cellValue = "error";
}
在正常逻辑下,我们获取公式里面的值使用cell.getNumericCellValue();方法,可以使用BigDecimal来获取两位小数。但是在有些公式计算中我们发现计算的值是与execl里面计算不相同的,所以采用以下方式
String cellValue = "";
DataFormatter df = new DataFormatter();
FormulaEvaluator formulaEval = srcBook.getCreationHelper().createFormulaEvaluator(); cellValue = df.formatCellValue(cell, formulaEval);
具体逻辑如下:
//创建一个计算单元格的类
FormulaEvaluator formulaEval = srcBook.getCreationHelper().createFormulaEvaluator();
然后将他使用DataFormatter的方法来格式化
如果对你有用请点点关注,我继续和pm对线对了~~