Saltar al contenido

Java Apache Poi, cómo establecer el color de fondo y los bordes al mismo tiempo

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *