当EXCEL中包含计算公式时,利用POI去执行的方法如下。
第一种,当你知道你要执行的workbook类型时(HSSF 或者XSSF),可以直接调用静态方法,一次将workbook上的所有公式计算完毕。
File tempFile = new File("/somepath/test.xls");
InputStream tempFileStream = new FileInputStream(tempFile);
HSSFWorkbook workBook = new HSSFWorkbook(tempFileStream);
// 执行计算公式
HSSFFormulaEvaluator.evaluateAllFormulaCells(workBook);
注意:当你利用POI写入单元格的内容不是Number类型,而是文本类型时。上述计算是不会执行的。
第二种: 遍历整个workbook去执行:
FileInputStream fis = new FileInputStream("/somepath/test.xls");
Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("/somepath/test.xls")
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
for(int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
Sheet sheet = wb.getSheetAt(sheetNum);
for(Row r : sheet) {
for(Cell c : r) {
if(c.getCellType() == Cell.CELL_TYPE_FORMULA) {
evaluator.evaluateFormulaCell(c);
}
}
}
}