2010-05-10 42 views
38

Estoy usando POI para crear una hoja de cálculo de Excel en Java. Tengo el siguiente código utilizado para la creación de una fila de encabezado:Establecer color de primer plano para HSSFCellStyle siempre sale negro

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

El problema que estoy teniendo es que el establecimiento del color de relleno de fondo de la celda siempre sale negro, no importa de qué color cojo. ¿Qué estoy haciendo mal? Si no uso la línea "setFillPattern", no aparece ningún color.

Respuesta

64

Tengo esto para trabajar. Tuve que establecer el color de primer plano para que el color de fondo funcionara (??).

Así que cambió:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); 

a:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); 

y funcionó!

+5

Ahh, ya entiendo. Necesito cambiar el color de primer plano para cambiar el color de fondo - ¡genio! – Pakman

+2

Ahorrado muchas horas de desesperación, ¿alguien sabe por qué funciona de esta manera? – CGK

+4

Creo que la celda está pintada con un patrón que consta de píxeles de primer plano y fondo. Si usa SOLID_FOREGROUND, solo el píxel de primer plano está visible. Este color es diferente del color utilizado para representar texto, que se establece con la fuente. – Axel

5

Si va a configurar el color de fondo, utilice

cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

Si va a configurar el color de fondo, utilizan

style.setFillPattern(FillPatternType.THICK_BACKWARD_DIAG); 

o

style.setFillPattern(FillPatternType.THIN_BACKWARD_DIAG); 

Los colores de primer plano y de fondo parecen para 'apilar' (rojo + azul = púrpura) si configura el patrón de relleno en primer plano antes del relleno de fondo patt ern, pero no al revés. Hay muchos otros patrones de relleno entre los que puede elegir. Tenga en cuenta que el color no se aplicará si no cambia el patrón de relleno predeterminado.

CellStyle.SOLID_FOREGROUND está obsoleto en la versión 3.15+. Use FillPatternType.SOLID_FOREGROUND en su lugar.

+0

Una buena explicación sobre 'style.setFillForegroundColor (IndexedColors.GREY_25_PERCENT.getIndex()); \t \t \t style.setFillPattern (FillPatternType.SOLID_FOREGROUND); 'que me ayudó, Gracias +1): - – Yash

Cuestiones relacionadas