2010-05-10 13 views
38

Sto utilizzando POI per creare un foglio di calcolo Excel in Java. Ho il seguente codice utilizzato per la creazione di una riga di intestazione:L'impostazione del colore di primo piano per HSSFCellStyle viene sempre visualizzata in nero

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

Il problema che sto avendo è che l'impostazione del colore di riempimento di sfondo della cella viene sempre fuori il nero, non importa di che colore prendo. Che cosa sto facendo di sbagliato? Se non utilizzo la riga "setFillPattern", non viene mostrato alcun colore.

risposta

64

Ho ottenuto questo per funzionare. Ho dovuto impostare il colore di primo piano per far funzionare il colore di sfondo (??).

Così ho cambiato:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); 

a:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); 

e ha funzionato!

+5

Ah, ho capito. Ho bisogno di cambiare il colore di primo piano per cambiare il colore dello sfondo - geniale! – Pakman

+2

Salvato molte ore di disperazione, qualcuno sa perché funziona così? – CGK

+4

Penso che la cella sia dipinta con un motivo costituito da pixel in primo piano e sullo sfondo. Se utilizzi SOLID_FOREGROUND, sono visibili solo i pixel in primo piano. Questo colore è diverso dal colore utilizzato per il rendering del testo, che è impostato con il carattere. – Axel

5

Se si imposta il colore di primo piano, utilizzare

cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

Se si imposta il colore di sfondo, utilizzare

style.setFillPattern(FillPatternType.THICK_BACKWARD_DIAG); 

o

style.setFillPattern(FillPatternType.THIN_BACKWARD_DIAG); 

I colori di primo piano e di sfondo sembrano per "impilare" (rosso + blu = viola) se si imposta il motivo di riempimento in primo piano prima del riempimento di sfondo ern, ma non viceversa. Ci sono molti altri modelli di riempimento tra cui scegliere. Si noti che il colore non verrà applicato se non si modifica il modello di riempimento predefinito.

CellStyle.SOLID_FOREGROUND è obsoleto nella versione 3.15+. Utilizzare invece FillPatternType.SOLID_FOREGROUND.

+0

Una buona spiegazione su 'style.setFillForegroundColor (IndexedColors.GREY_25_PERCENT.getIndex()); \t \t \t style.setFillPattern (FillPatternType.SOLID_FOREGROUND); 'che mi ha aiutato, Grazie +1): - – Yash

Problemi correlati