使用基于单元格公式结果的POI设置单元格样式

时间:2015-10-23 21:22:28

标签: java apache-poi

我需要一些帮助来根据单元格值设置单元格样式。

用于填充单元格的代码。

String totalvariationweightv1 = "J" + (x+1);
String totalvariationweightv2 = "L" + (x+1);
cell85014.setCellType(Cell.CELL_TYPE_FORMULA);
cell85014.setCellFormula("SUM(((" + totalvariationweightv2 + "-" + totalvariationweightv1 + ")/" + totalvariationweightv1 + ")*100)");

如果超过某个值,我需要为该字段着色。现在我只有交替的颜色:

cell85014.setCellStyle((x%2)==0?stylefloatGray:stylefloat);

我无法弄清楚如何获得单元格值。使用getNumericValue返回0.

1 个答案:

答案 0 :(得分:1)

Apache POI存储公式,但doesn't evaluate it automatically

  

Excel文件格式(.xls和.xlsx)存储"缓存"每个公式的结果以及公式本身。这意味着当文件打开时,可以快速显示,而无需花费很长时间计算所有公式结果。这也意味着当通过Apache POI读取文件时,您也可以快速获得结果!

     

使用Apache POI对公式单元格本身或它们所依赖的公式进行更改后,通常应执行公式评估以使这些"缓存"结果更新。这通常在执行所有更改之后,但在您将文件写出之前完成。

您必须告诉Apache POI单独评估公式。

FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();

// Set your cell formula here

switch (evaluator.evaluateFormulaCell(cell85014)) {
    case Cell.CELL_TYPE_NUMERIC:
        double x = cell85014.getNumericCellValue();
        // Set cell style here, based on numeric value,
        // as you already are doing in your code.
        // Watch out for floating point inaccuracies!
        break;
    default:
        System.err.println("Unexpected result type!");
        break;
}