2017-11-10 144 views
1

嘗試使用POI條件格式。我有以下方法:使用POI FontFormatting時出現異常setFontColor

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類的顏色。

回答

2

這看起來像在Apache的POI的小bug,一個簡單的解決方法是,首先設置一個索引色,然後設置實際預期全色,即

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

setFontColorIndex()將初始化內部結構,以便即setFontColor()將工作。

僅供參考,應該及時修復Apache POI 4.0版的bug。