2015-06-26 335 views
7

我在Apache POI中爲XSSFWorkbook設置自定義字體顏色時遇到了一些問題。當我這樣做:在Apache POI中爲XSSFWorkbook設置自定義字體顏色

yellow = workbook.createCellStyle(); 
    Font whiteFont = workbook.createFont(); 
    whiteFont.setColor(new XSSFColor(new Color(255, 255, 255)).getIndexed()); 
    yellow.setFillForegroundColor(new XSSFColor(yellowRGB)); 
    yellow.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); 
    yellow.setFont(whiteFont); 

字體保持黑色,我不知道我在做什麼錯,但是。

回答

6

你可以做whiteFont.setColor(new XSSFColor(new Color(255,255,255)));

然而,有一個bug in Apache POI,它是開關黑色和白色。看起來他們在XSSFColor.java(查看XSSFColor.correctRGB())中添加了一個「修復」,以糾正Excel中的問題。 Excel可能已修復,但Apache POI未更新。

相反,你可以這樣做:whiteFont.setColor(HSSFColor.WHITE.index)whiteFont.setColor(IndexedColors.WHITE.index);(這是不建議使用)

,或者如果你做whiteFont.setColor(new XSSFColor(new Color(255,255,254)));這將是非常接近白色。

+0

但問題是我必須使用'getIndexed()',因爲'Font.setColor(short)'使用'short'作爲參數。此外,該方法根本不起作用,因爲我想也許它只是爲了白色,但是當我做了'whiteFont.setColor(new XSSFColor(new Color(234,17,156))。getIndexed());',它仍然保持黑色 – silverAndroid

+0

getIndexed()存在一些問題,它可能是CTColor中的問題,這是XSSFColor在底層使用的問題。你使用的是什麼版本的POI?您仍然可以執行'whiteFont.setColor(HSSFColor.WHITE.index)'或'whiteFont.setColor(IndexedColors.WHITE.index);' –

+0

工作簿的類型是什麼?什麼是您正在使用的Font類的完整類型? (哪個包?) –

1
XSSFFont font = (XSSFFont) wb.createFont(); 
font.setColor(new XSSFColor(Color.decode("#7CFC00"))); 
+0

添加一些解釋並回答這個答案如何幫助OP解決當前問題 –