使用POI FontFormatting setFontColor时出现异常

时间:2017-11-10 23:58:43

标签: java apache-poi

尝试使用POI条件格式。我有以下方法:

private final static Color PEAK_ORANGE = new Color(255, 239, 221);

public ConditionalFormattingRule getConditionalFormatting(ConditionalFormattingRule formattingContainer, FormatSpecs format){

    FontFormatting fontFmt = formattingContainer.createFontFormatting();
    fontFmt.setFontStyle(true, false);
    // fontFmt.setFontColorIndex((short)11);
    fontFmt.setFontColor(new XSSFColor(PEAK_ORANGE));

    PatternFormatting patternFmt = formattingContainer.createPatternFormatting();
    patternFmt.setFillBackgroundColor(new XSSFColor(PEAK_ORANGE));
    return formattingContainer;
}

当我使用setFontColor()方法时,我得到索引超出范围的异常。

enter image description here

当我使用setFontColorIndex()方法使用一些任意索引值时,我没有得到异常。但请注意,我在调用中使用完全相同的颜色引用来设置背景颜色

  

patternFmt.setFillBackgroundColor(new XSSFColor(PEAK_ORANGE));

这很好,没有例外。

有没有其他人遇到这个?我在调用中错过了设置字体颜色的内容吗?我更喜欢使用我的颜色而不是IndexedColors类的颜色。

1 个答案:

答案 0 :(得分:2)

这看起来像Apache POI中的一个小错误,一个简单的解决方法是首先设置索引颜色,然后设置实际的预期全色,即

    fontFmt.setFontColorIndex((short)1);
    fontFmt.setFontColor(new XSSFColor(PEAK_ORANGE));

setFontColorIndex()将初始化内部结构,以便setFontColor()起作用。

仅供参考,该错误应及时修复Apache POI 4.0版本。