使用poi更新excel時(shí)默蚌,如果單元格A設(shè)置了公式,當(dāng)其依賴的其他單元格填充了值之后苇羡,導(dǎo)出的excel中A仍為公式而不是自動(dòng)計(jì)算的值绸吸,如圖:
分值小計(jì)沒有更新成計(jì)算結(jié)果。
解決方法
poi中提供了org.apache.poi.ss.usermodel.FormulaEvaluator
這個(gè)接口设江,實(shí)現(xiàn)對公式的更新锦茁。其中HSSFFormulaEvaluator
, XSSFFormulaEvaluator
實(shí)現(xiàn)了這個(gè)接口。
實(shí)現(xiàn)思路
我們可以遍歷一行單元格中的所有格叉存,判斷如果其類型為Cell.CELL_TYPE_FORMULA
码俩,則證明此單元格為公式,可以使用evaluator.evaluateFormulaCell(cell);
將其更新歼捏。示例代碼如下:
private static void updateFormula(Workbook wb,Sheet s,int row){
Row r=s.getRow(row);
Cell c=null;
FormulaEcaluator eval=null;
if(wb instanceof HSSFWorkbook)
eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);
else if(wb instanceof XSSFWorkbook)
eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);
for(int i=r.getFirstCellNum();i<r.getLastCellNum();i++){
c=r.getCell(i);
if(c.getCellType()==Cell.CELL_TYPE_FORMULA)
eval.evaluateFormulaCell(c);
}
}