我需要一些帮助来根据单元格值设置单元格样式。
用于填充单元格的代码。
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.
答案 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;
}