当前位置: 首页 > 知识库问答 >
问题:

使用 POI 库进行条件格式化

万修然
2023-03-14

我正面临着POI条件格式的一些问题。我不完全明白POI在这里做什么。我正在为值超过70的单元格值设置背景颜色格式规则。我想在我的应用程序中获得Cell样式(通过条件格式规则应用),但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个答案

向实
2023-03-14

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

 类似资料:
  • 我使用apache POI3.15的工作文件在excel中插入图像,但我想在图像中添加边框线,这可以通过右键单击MS Office中的图像-->格式图片-->填充线-->线-->实线来完成,在SO和apache文档中搜索了很多,但不知道如何使用poi来实现这一点。遵循我的代码

  • 我在使用Apache POI3.9阅读Excel表中的条件格式时遇到了困难。Excel文件是使用MS Excel2010创建的,添加了一些条件格式(我解压缩了。xlsx文件,检查了sheet1.xml,它有几个x14:ConditionalFormatting标记),但是sheet.getSheetConditionalFormatting().getNumConditionalFormattin

  • 我有一个XSSF工作簿,我想在一组定义了条件格式的单元格中定义一个自定义背景色,但问题是类中的方法只接受一个类型短参数,而不是像这样的: 我可以做,但我想定义一种自定义颜色。我该怎么做?。

  • 问题内容: 我有一个包含瑞典语/挪威语字符串的数据库表。 查询某些数据时,将得到如下输出: 输出与 现在,如果我为了查看具有正确编码的字符,则MySQL命令行的表格输出格式将中断。 输出与 题: 这不是一个大问题,但会使输出更难阅读。有人知道如何保持表格格式完整吗? 问题答案: 简短答案 使用以下选项启动客户端: 您可以在文件中将此设置为默认值。 简短的答案不起作用,请看下面的波纹管 上述部队的命

  • 问题内容: 我在Postgres 11.3数据库中有一个带有列的表。 尝试更新嵌套数组名称中的所有对象。 如果路径是对象,则应将路径从对象更新为具有以下值的字符串: 如果不存在该路径,则该对象应保持不变。 使用查询测试设置:小提琴链接 所需结果: 我已经修改了查询并链接到小提琴中。有人可以看看是否正确吗? 问题答案: 平原应该有所作为。 db <>在这里 拨弄 (Postgres 11!) 为了同

  • 问题内容: 我想通过lambda缩进实现以下内容: 多行语句: 单行语句: 当前,Eclipse将自动格式化为以下格式: 多行语句: 单行语句: 而且我发现这真的很混乱,因为该调用直接位于的下面,而且它们之间根本没有空间。如果我可以在缩进的新行中开始lambda,并且希望该调用位于该调用的正上方,则更希望这样做。但是,唯一可以使用标准Java-8 Eclipse Formatter定制的东西是la