要解决Apache POI公式求值器未计算包含公式的单元格的问题,可以按照以下步骤进行操作:
Workbook
对象,例如XSSFWorkbook
或HSSFWorkbook
,用于读取Excel文件。getSheet()
方法。FormulaEvaluator
对象,使用getCreationHelper().createFormulaEvaluator()
方法。getLastRowNum()
方法获取行数。getLastCellNum()
方法获取列数。getRow()
和getCell()
方法。getCellType()
方法。CELL_TYPE_FORMULA
,则使用evaluate()
方法计算公式的结果。FormulaEvaluator
对象的其他属性,例如setIgnoreMissingWorkbooks(true)
来忽略缺失的工作簿。Workbook
对象,使用close()
方法。下面是一个完整的示例代码:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelFormulaEvaluatorExample {
public static void main(String[] args) {
try {
// 读取Excel文件
FileInputStream fileInputStream = new FileInputStream("path_to_your_excel_file.xlsx");
Workbook workbook = new XSSFWorkbook(fileInputStream);
fileInputStream.close();
// 获取要计算的工作表
Sheet sheet = workbook.getSheetAt(0);
// 创建FormulaEvaluator对象
FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
// 遍历每一行
for (Row row : sheet) {
// 遍历每一列
for (Cell cell : row) {
// 检查单元格类型
if (cell.getCellType() == CellType.FORMULA) {
// 计算公式的结果
formulaEvaluator.evaluate(cell);
}
}
}
// 写入计算后的结果
FileOutputStream fileOutputStream = new FileOutputStream("path_to_your_output_file.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
// 关闭Workbook对象
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个示例代码将会读取一个Excel文件,计算包含公式的单元格的结果,并将计算后的结果写入到一个新的Excel文件中。你需要将path_to_your_excel_file.xlsx
替换为你自己的Excel文件路径,同时将path_to_your_output_file.xlsx
替换为你想要保存计算结果的新Excel文件路径。