2015-10-23 227 views
0

我需要一些关于根据单元格值设置单元格样式的帮助。使用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

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; 
}