java POI XSSF公式计算器

java POI XSSF公式计算器,java,apache-poi,xssf,Java,Apache Poi,Xssf,我在保存新excel文件时遇到问题。我希望当它被保存时,公式会自动计算,但此时它只是在excel文件中返回一个字符串。这个公式是正确的。我不知道如何让公式化评估器正常工作 在这里输入返回字符串的公式: dataRow1.createCell((short)5).setCellValue("=VLOOKUP(A"+rowCountVlookup+",'C:\\Users\\Admin\\Documents\\JCreator LE\\MyProjects\\WordCount\\classes\\

我在保存新excel文件时遇到问题。我希望当它被保存时,公式会自动计算,但此时它只是在excel文件中返回一个字符串。这个公式是正确的。我不知道如何让
公式化评估器
正常工作

在这里输入返回字符串的公式:

dataRow1.createCell((short)5).setCellValue("=VLOOKUP(A"+rowCountVlookup+",'C:\\Users\\Admin\\Documents\\JCreator LE\\MyProjects\\WordCount\\classes\\[Pricing.xlsx]Sheet1'!$B$3:$E$41,4, FALSE)*E"+rowCountVlookup+"");

任何帮助都将不胜感激。

我使用此代码计算公式

//I use an instance of the workbook for the Excel workbook I'm working at the moment
Workbook wbook;

private CellValue formulaEvaluation(Cell cell) {
    FormulaEvaluator formulaEval = wbook.getCreationHelper().createFormulaEvaluator();
    return formulaEval.evaluate(cell);
}

public Double obtieneObjetoNumericoCelda(Cell cell) {
    Double dblValue = null;
    if (cell != null) {
        switch(cell.getCellType()) {
        case Cell.CELL_TYPE_NUMERIC:
            dblValue = cell.getNumericCellValue();
            break;
        case Cell.CELL_TYPE_FORMULA:
            CellValue objCellValue = formulaEvaluation(cell);
            if (objCellValue.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                dblValue = objCellValue.getNumberValue();
            }
            break;
        }
    }
    return dblValor;
}

我最终设法解决了这个问题

String strFormula = "ROUND((VLOOKUP(A"+rowCountVlookup+",'C:\\Users\\Admin\\Desktop\\[pricing.xlsx]Sheet1'!$B$3:$E$41,4, FALSE)*E"+rowCountVlookup+"),2)";
                            dataRow1.createCell((short)5).setCellType(Cell.CELL_TYPE_FORMULA);
                            dataRow1.createCell((short)5).setCellFormula(strFormula);

您最好只创建一次公式计算器并重新使用它,而不是每个单元格创建一次公式计算器“通常,每个工作表只需创建一个FormulaEvaluator实例,但除了创建FormulaEvaluator对象之外,在每个工作表中创建多个FormulaEvaluator实际上没有任何开销。“。在我的情况下,工作簿有一个包装器类,因此多次创建公式不会对性能产生影响。在!