【问题标题】:Can Apache POI apply "color scale" conditional formatting to a range?Apache POI 可以将“色标”条件格式应用于范围吗?
【发布时间】:2014-10-07 09:07:45
【问题描述】:

我可以创建具有色阶条件格式的效果(其中单元格的前景色根据当前单元格值与范围内所有单元格值的比较而变化)但是我似乎找不到 Excel 的实现条件格式。 Apache POI 有能力创建这样的格式化规则吗?

【问题讨论】:

  • 您打算为.xls (HSSF) 还是.xlsx (XSSF) 执行此操作?
  • 理想情况下是 XSSF,但任何一种解决方案都会有所帮助。
  • 您是否尝试查看Apache POI Conditional Formatting example?离你有多近?
  • 我确实读过了,不幸的是它似乎涵盖了除色标格式之外的所有内容。所有的比较函数都是基于公式的,所以也许有一个公式可以解决这个问题,但这似乎比我已经完成的静态着色更复杂。
  • 如果您在 Excel (.xlsx) 中定义色标格式化规则并使用 Apache POI 将其读回,会发生什么情况,保存为什么?

标签: java excel apache-poi


【解决方案1】:

答案是肯定的,在 Apache POI 3.16 版本中。

sheet.getSheetConditionalFormatting().createConditionalFormattingColorScaleRule()

阅读这篇文章以了解添加时间的详细信息(3.13 beta 2): https://stackoverflow.com/a/32164925/231860

这是显示用法的单元测试:https://svn.apache.org/repos/asf/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java

@Test
public void testCreateColorScaleFormatting() throws IOException {
    Workbook wb1 = _testDataProvider.createWorkbook();
    Sheet sheet = wb1.createSheet();

    SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
    ConditionalFormattingRule rule1 = 
            sheetCF.createConditionalFormattingColorScaleRule();
    ColorScaleFormatting clrFmt = rule1.getColorScaleFormatting();

    assertEquals(3, clrFmt.getNumControlPoints());
    assertEquals(3, clrFmt.getColors().length);
    assertEquals(3, clrFmt.getThresholds().length);

    clrFmt.getThresholds()[0].setRangeType(RangeType.MIN);
    clrFmt.getThresholds()[1].setRangeType(RangeType.NUMBER);
    clrFmt.getThresholds()[1].setValue(10d);
    clrFmt.getThresholds()[2].setRangeType(RangeType.MAX);

    CellRangeAddress [] regions = { CellRangeAddress.valueOf("A1:A5") };
    sheetCF.addConditionalFormatting(regions, rule1);

【讨论】:

  • 很高兴听到它被添加,我还没有迁移到新版本。感谢更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
相关资源
最近更新 更多