使用POI库进行条件格式化

时间:2013-10-04 09:55:11

标签: java apache-poi

我正面临POI条件格式化的一些问题。我并没有完全了解POI在这里做的事情。  我正在设置值大于70的单元格值的背景颜色格式规则。我想在我的应用程序中获取CellStyle(通过条件格式规则应用),但POI不会返回更新的单元格样式而是返回默认单元格样式。这是我的代码

            XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet();

    sheetConditionalFormatting sheetCF = sheet
            .getSheetConditionalFormatting();



    // Condition 1: Cell Value Is greater than 70 (Blue Fill)
    ConditionalFormattingRule rule1 = sheetCF
            .createConditionalFormattingRule(ComparisonOperator.GT, "70");
    PatternFormatting fill1 = rule1.createPatternFormatting();
    fill1.setFillBackgroundColor(IndexedColors.BLUE.index);
    fill1.setFillPattern(PatternFormatting.SOLID_FOREGROUND);

    CellRangeAddress[] regions = { CellRangeAddress.valueOf("A1:C10") };

    int index = sheetCF.addConditionalFormatting(regions, rule1);

    sheet.createRow(0).createCell(0).setCellValue(84);
    sheet.createRow(1).createCell(0).setCellValue(60);
    sheet.createRow(2).createCell(0).setCellValue(50);
    sheet.createRow(3).createCell(0).setCellValue(51);
    sheet.createRow(4).createCell(0).setCellValue(49);
    sheet.createRow(5).createCell(0).setCellValue(41);

    Cell cell = sheet.getRow(0).getCell(0);
    CellStyle style = cell.getCellStyle();
    System.out.println("style index  : "+style.getIndex()+" value:"+cell.getNumericCellValue());

使用上面的代码,style.getIndex()总是返回0(即默认格式)。我觉得它应该返回我更新的格式样式与背景颜色。当我在实际的xlsx文件中编写上述工作簿并使用MSExcel打开时,我可以看到第一个单元格的背景颜色。再次,当我从xlsx文件读取到POI工作簿时,它将不会返回具有背景颜色的单元格样式。

有没有人尝试/面对同样的问题?

此致 阿扎

1 个答案:

答案 0 :(得分:1)

getCellStyle 返回与单元格关联的格式样式。 应用条件后不返回评估后的格式样式 样式。为此,您需要 ConditionalFormattingEvaluator