java - 使用 POI FontFormatting setFontColor 时出现异常

标签 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));

这工作正常,没有异常(exception)。

还有其他人遇到过这种情况吗?我在设置字体颜色的调用中遗漏了一些内容吗?我更喜欢使用我的颜色而不是 IndexedColors 类中的颜色。

最佳答案

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

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

setFontColorIndex() 将初始化内部结构,以便 setFontColor() 正常工作。

仅供引用,该错误应在 Apache POI 4.0 版本中及时修复。

关于java - 使用 POI FontFormatting setFontColor 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47232915/

相关文章:

Java:将字符转换为字符串

java - 语法错误以及为什么会出现这些错误?

java - 在 Spark 1.6.0 上,获取与 spark.driver.maxResultSize 相关的 org.apache.spark.SparkException

java - 如果从 ArrayList 传递到 excel,如何从 XML 中检测换行符?

java - 如何在 javac/java 类路径中添加多个 .jar 文件 - 适用于 Debian Linux

java - 参数在方法中间消失了?

java - Apache POI org.apache.poi.ss.formula.FormulaParseException

android - 使用 Apache POI 库解析出现在 Excel 工作表中的值

java: ByteArrayOutputStream.toByteArray() 性能

java - 使用 Java 和 Apache poi 从 .xls 或 .xlsx 文件中读取内容