2010-05-10 8 views
38

Ich verwende POI, um eine Excel-Tabelle in Java zu erstellen. Ich habe die eine Kopfzeile verwendet folgenden Code für die Erstellung von:Die Vordergrundfarbe für HSSFCellStyle wird immer schwarz angezeigt

HSSFWorkbook wb = new HSSFWorkbook(); 
HSSFSheet sheet = wb.createSheet("Report"); 

// some more code 

HSSFRow row = sheet.createRow(0); 

HSSFCell cell = row.createCell(cellNumber); 
HSSFCellStyle cellStyle = wb.createCellStyle(); 

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); 
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 

HSSFFont font = wb.createFont(); 
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 
font.setColor(HSSFColor.WHITE.index); 

cellStyle.setFont(font); 
cell.setCellStyle(cellStyle); 

Das Problem, das ich habe ist, dass auf der Zelle die Füllung Hintergrundfarbe Einstellung immer schwarz kommt, egal, welche Farbe ich wählen. Was mache ich falsch? Wenn ich die Zeile "setFillPattern" nicht verwende, wird überhaupt keine Farbe angezeigt.

Antwort

64

Ich habe das zur Arbeit gebracht. Ich musste die Vordergrundfarbe einstellen, damit die Hintergrundfarbe funktioniert (??). So änderte

I:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); 

zu:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); 

und es funktionierte!

+5

Ahh, ich verstehe. Ich muss die Vordergrundfarbe ändern, um die Hintergrundfarbe zu ändern - Genie! – Pakman

+2

Viele Stunden der Verzweiflung gerettet, weiß jemand, warum das so funktioniert? – CGK

+4

Ich denke, die Zelle ist mit einem Muster aus Vordergrund und Hintergrund Pixel gemalt. Wenn Sie SOLID_FOREGROUND verwenden, sind nur die Vordergrundpixel sichtbar. Diese Farbe unterscheidet sich von der Farbe, die zum Rendern von Text verwendet wird, der mit der Schriftart festgelegt wird. – Axel

5

Wenn Sie die Vordergrundfarbe einstellen, verwenden

cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

Wenn Sie die Hintergrundfarbe einstellen, verwenden

style.setFillPattern(FillPatternType.THICK_BACKWARD_DIAG); 

oder

style.setFillPattern(FillPatternType.THIN_BACKWARD_DIAG); 

Die Vorder- und Hintergrundfarben scheinen 'stapeln' (rot + blau = lila), wenn Sie das Vordergrundfüllmuster vor dem Hintergrundfüllmuster setzen ja, aber nicht umgekehrt. Es gibt mehrere andere Füllmuster, aus denen Sie auswählen können. Beachten Sie, dass die Farbe nicht angewendet wird, wenn Sie das Standardfüllmuster nicht ändern.

CellStyle.SOLID_FOREGROUND ist in Version 3.15+ veraltet. Verwenden Sie stattdessen FillPatternType.SOLID_FOREGROUND.

+0

Eine gute Erklärung über 'style.setFillForegroundColor (IndexedColors.GREY_25_PERCENT.getIndex()); \t \t \t style.setFillPattern (FillPatternType.SOLID_FOREGROUND); 'was mir geholfen hat, Danke +1): - – Yash