Contamos con el hallazgo a esta cuestión, o por lo menos eso deseamos. Si sigues con dudas deja tu comentario y sin dudarlo te responderemos
Solución:
cambio backgroundStyle.setFillBackgroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
a
backgroundStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
Y puede establecer el borde como se muestra a continuación:
backgroundStyle.setBorderBottom(CellStyle.BORDER_THIN);
backgroundStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
backgroundStyle.setBorderLeft(CellStyle.BORDER_THIN);
backgroundStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
backgroundStyle.setBorderRight(CellStyle.BORDER_THIN);
backgroundStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
backgroundStyle.setBorderTop(CellStyle.BORDER_THIN);
backgroundStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
Esto le dará color amarillo y borde según sea necesario.
A partir de POI 3.x, el color de relleno de celda se establece de la siguiente manera:
CellStyle cs = wb.createCellStyle();
cs.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Su verdadero problema es que tiene dos estilos, uno llamado backgroundStyle y otro llamado borderStyle. Luego, aplica ambos estilos a la misma celda, pero una celda solo puede tener un estilo, por lo que en lugar de agregar el segundo estilo, está sobrescribiendo el primer estilo con el segundo estilo.
En vez de:
CellStyle backgroundStyle = workbook.createCellStyle();
backgroundStyle.setFillBackgroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
backgroundStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
CellStyle borderStyle = workbook.createCellStyle();
borderStyle.setBorderBottom(CellStyle.BORDER_THIN);
borderStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
borderStyle.setBorderLeft(CellStyle.BORDER_THIN);
borderStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
borderStyle.setBorderRight(CellStyle.BORDER_THIN);
borderStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
borderStyle.setBorderTop(CellStyle.BORDER_THIN);
borderStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
Solo crea un solo estilo como este:
CellStyle backgroundStyle = workbook.createCellStyle();
backgroundStyle.setFillBackgroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
backgroundStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
backgroundStyle.setBorderBottom(CellStyle.BORDER_THIN);
backgroundStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
backgroundStyle.setBorderLeft(CellStyle.BORDER_THIN);
backgroundStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
backgroundStyle.setBorderRight(CellStyle.BORDER_THIN);
backgroundStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
backgroundStyle.setBorderTop(CellStyle.BORDER_THIN);
backgroundStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
Luego aplica eso a tu celda:
Sheet sheet = workbook.createSheet();
Row row = sheet.createRow(1);
Cell cell = row.createCell(1);
cell.setCellStyle(backgroundStyle);
NOTA: Como se mencionó en otras respuestas aquí, el color de fondo se ignora para FillPattern = SOLID_FOREGROUND, debe establecer el color de primer plano para ese patrón. Esto puede ser confuso porque está tratando de configurar el fondo de la celda en un color sólido. Pero cell background
no es lo mismo que background color
. Cell background
es lo mismo que Fill Pattern
que tiene dos colores a Foreground Color
y un Background Color
estos se muestran en función de las Fill Pattern
seleccionado. los SOLID_FOREGROUND
relleno utiliza sólo el Foreground Color
.
Reseñas y puntuaciones
Si sostienes algún recelo y disposición de ascender nuestro post te evocamos ejecutar una crítica y con placer lo analizaremos.