JAVAPOI1.17读取模板公式数据报错问题
JAVA POI 1.17读取模板公式数据问题
最近在开发过程中碰到了⼀个这样的需求:⼯程内导⼊⼀个excel模板,模板有四个sheet页,第⼀个sheet页⽤来填充从数据库中读取的原始数据,剩余的三个sheet页全都是各种各样的计算公式,通过计算第⼀个sheet页的原始数据得出计算数据并存⼊我们的数据库。
数据导⼊之后,当我读取公式计算数据的时候,问题出现了,cell读到的是公式⽽不是计算好的数据,使⽤下⾯两个⽅法读取会报公式错误:
try{
cellValue = String.NumericCellValue());
}catch(IllegalStateException e){
cellValue = String.RichStringCellValue());
}java valueof
于是我将⽣成的excel拿出来看了⼀下,原始数据已经插⼊了,但是应该⽣成数据的计算sheet页却全部还是显⽰的公式,并没有显⽰计算好的数据。于是我去⽹上查了⼀下,得到了以下⼀个⽅法,可以强制刷新计算公式:
//刷新sheet页⾥⾯的公式
sheet.setForceFormulaRecalculation(true);
刷新完之后excel确实已经⽣成了数据,但是java代码⾥⾯读取到的还是公式,这就⽐较奇怪了。于是我⼜⽤表达式强制计算了⼀遍,这次终于可以读取到了:
//强制计算
附整体的⼀个计算代码:
XSSFWorkbook wb =new XSSFWorkbook(file);
//读取sheet页
XSSFSheet sheet = wb.getSheet("sheet1");
//刷新公式
wb.setForceFormulaRecalculation(true);
//强制计算
//⼯作表的⾏
Row row;
Cell cell;
//获取sheet页A1的公式的数据
row = Row(0);
cell = Cell(0);
String cellValue="-";
SimpleDateFormat ft =new SimpleDateFormat("yyyy-MM-dd");
CellTypeEnum()){
case STRING:// ⽂本
cellValue = RichStringCellValue().getString();
break;
case NUMERIC:// 数字、⽇期
if(DateUtil.isCellDateFormatted(cell)){
cellValue = ft.DateCellValue());
}else{
cellValue = String.NumericCellValue());
}
break;
case BOOLEAN:// 布尔型
cellValue = String.BooleanCellValue());
break;
case BLANK:// 空⽩
cellValue = StringCellValue();
break;
case ERROR:// 错误
cellValue ="错误";
break;
case FORMULA:// 公式
// 得到对应单元格的字符串
try{
cellValue = String.NumericCellValue());
}catch(IllegalStateException e){
cellValue = String.RichStringCellValue());
}
break;
default:
cellValue ="-";
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论