2015-06-26 8 views
7

Mam problem z ustawieniem niestandardowego koloru czcionki dla XSSFWorkbook z Apache POI. Kiedy to zrobię:Ustawianie niestandardowego koloru czcionki dla XSSFWorkbook w Apache POI

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

Czcionka pozostaje czarna, nie jestem pewien, co robię źle.

Odpowiedz

6

Można zrobić whiteFont.setColor(new XSSFColor(new Color(255,255,255)));

Jednakże, istnieje bug in Apache POI, gdzie jest przejście czerni i bieli. Wygląda na to, że wstawili "poprawkę" w XSSFColor.java (spójrz na XSSFColor.correctRGB()), aby poprawić problem w Excelu. Prawdopodobnie program Excel został naprawiony, ale Apache POI nie został zaktualizowany.

Zamiast tego można zrobić: whiteFont.setColor(HSSFColor.WHITE.index) lub whiteFont.setColor(IndexedColors.WHITE.index); (to jest przestarzałe)

lub jeśli nie whiteFont.setColor(new XSSFColor(new Color(255,255,254))); to będzie naprawdę blisko do białego.

+0

Ale problem polega na tym, że muszę użyć 'getIndexed()', ponieważ 'Font.setColor (short)' używa 'short' jako parametru. Ponadto, metoda ta w ogóle nie działa, ponieważ myślałem, że może to tylko dla White'a, ale kiedy zrobiłem 'whiteFont.setColor (nowy XSSFColor (nowy kolor (234, 17, 156)). GetIndexed());', to wciąż pozostawał czarny – silverAndroid

+0

Istnieje pewien problem z getIndexed(), jest to prawdopodobnie problem w CTColor, który właśnie XSSFColor używa pod maską. Z jakiej wersji POI korzystasz? Nadal możesz wykonać 'whiteFont.setColor (HSSFColor.WHITE.index)' lub 'whiteFont.setColor (IndexedColors.WHITE.index);' –

+0

Jaki jest typ twojego skoroszytu? Jaki jest pełny typ używanej klasy czcionek? (Który pakiet?) –

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

Dodaj wyjaśnienie w odpowiedzi na pytanie, w jaki sposób ta odpowiedź pomoże OP w ustalaniu bieżącego problemu –