POI公式评估失败

时间:2015-03-24 11:00:05

标签: java excel apache-poi

我正在使用POI来读取用户的excels文件。 在其中一个单元格中,我有这个公式:

IF(H24>0,((D24*(Q24))/((3600*H24)/I24))+IF(AND(N24>0,L24>0),(D24*L24*(Q24)/N24),0),0)

当N24的值为0时,问题就出现了。在这种情况下,POI返回DIV / 0错误,但我不明白为什么..因为IF(N24> 0)测试。

无论如何,我尝试更改公式并仅保留最新部分,如下所示: IF(N24> 0,D24 * L24 *(Q24)/ N24),0)=>仍然不起作用。

评估我使用的公式: FormulaEvaluator evaluationator = wb.getCreationHelper()。createFormulaEvaluator(); switch(evaluator.evaluateFormulaCell(cell))

.....

我正在使用POI 3.10,与3.11相同的pb

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我们找到了绕道。 当使用evaluateFormulaCell方法时,无法获得catchedValue。

通过使用valuator.evaluate(cell),我们仍然有错误但我们可以得到catchedValue。

答案 1 :(得分:0)

发现编程错误; 为了获得很长时间,开发人员对此进行了编码:

感谢您的回复并抱歉...

我发现了编程错误。

为了解决问题,开发人员使用了这种方法:

public static Object getCellValue(Row row, int index) {
    if (row == null || row.getCell(index) == null) {
        return null;
    }
    Object retour = null;
    Cell cell = row.getCell(index);
    cell.setCellType(Cell.CELL_TYPE_STRING);
    String val = cell.getStringCellValue().trim();
    if (val != null && !"".equals(val)) {
        retour = cell.getStringCellValue();
    }

    return retour;
}

gulty是:cell.setCellType(Cell.CELL_TYPE_STRING); ....