una tabla ponerle pintar personalizar formato estilo diseƱo dar como color celdas celda cambiar java apache-poi excel-2003

tabla - java pintar celdas



Ajuste de POI Fondo de celda a un color personalizado (5)

Quiero establecer un color personalizado para el fondo de una celda.
Yo uso HSSFWorkbook (no puedo usar nada más).

HSSFPalette palette = aWorkBook.getCustomPalette(); Color col = new Color(backgroundColor); HSSFColor myColor = palette.addColor((byte) 10, (byte) 11, (byte) 12);

Recibo este error: java.lang.RuntimeException: Could not find free color index


Como se señaló en la respuesta de Vlad , se está quedando sin ranuras de color libres. Una forma de evitar eso sería almacenar los colores en caché: siempre que intente una combinación RGB, la rutina debe verificar primero si la combinación está en el caché; si está en el caché, debería usar ese en lugar de crear uno nuevo desde cero; los nuevos colores solo se crearían si aún no están en caché.

Aquí está la implementación que uso; utiliza XSSF más el Guava de Guava y está orientado hacia la generación de colores XSSF a partir de declaraciones CSS rgb(r, g, b) , pero debería ser relativamente trivial para adaptarlo a HSSF:

private final LoadingCache<String, XSSFColor> colorsFromCSS = CacheBuilder.newBuilder() .build(new CacheLoader<String, XSSFColor>() { private final Pattern RGB = Pattern.compile("rgb//(//s*(//d+)//s*, //s*(//d+)//s*,//s*(//d+)//s*//)"); @Override public XSSFColor load(String style) throws Exception { Matcher mat = RGB.matcher(style); if (!mat.find()) { throw new IllegalStateException("Couldn''t read CSS color: " + style); } return new XSSFColor(new java.awt.Color( Integer.parseInt(mat.group(1)), Integer.parseInt(mat.group(2)), Integer.parseInt(mat.group(3)))); } });

Tal vez alguien más podría publicar un equivalente de HSSF? ;)


Consulte http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors .

Colores personalizados

HSSF:

HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFRow row = sheet.createRow((short) 0); HSSFCell cell = row.createCell((short) 0); cell.setCellValue("Default Palette"); //apply some colors from the standard palette, // as in the previous examples. //we''ll use red text on a lime background HSSFCellStyle style = wb.createCellStyle(); style.setFillForegroundColor(HSSFColor.LIME.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFFont font = wb.createFont(); font.setColor(HSSFColor.RED.index); style.setFont(font); cell.setCellStyle(style); //save with the default palette FileOutputStream out = new FileOutputStream("default_palette.xls"); wb.write(out); out.close(); //now, let''s replace RED and LIME in the palette // with a more attractive combination // (lovingly borrowed from freebsd.org) cell.setCellValue("Modified Palette"); //creating a custom palette for the workbook HSSFPalette palette = wb.getCustomPalette(); //replacing the standard red with freebsd.org red palette.setColorAtIndex(HSSFColor.RED.index, (byte) 153, //RGB red (0-255) (byte) 0, //RGB green (byte) 0 //RGB blue ); //replacing lime with freebsd.org gold palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 255, (byte) 204, (byte) 102); //save with the modified palette // note that wherever we have previously used RED or LIME, the // new colors magically appear out = new FileOutputStream("modified_palette.xls"); wb.write(out); out.close();

XSSF:

XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell( 0); cell.setCellValue("custom XSSF colors"); XSSFCellStyle style1 = wb.createCellStyle(); style1.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128))); style1.setFillPattern(CellStyle.SOLID_FOREGROUND);


No olvides llamar a esto.

style.setFillPattern(CellStyle.Align_Fill);

El parámetro puede variar según su necesidad. Tal vez CellStyle.FINE_DOTS o menos.


Obtienes este error porque la paleta está llena. Lo que debes hacer es anular el color predeterminado. Aquí hay un ejemplo de la función que estoy usando:

public HSSFColor setColor(HSSFWorkbook workbook, byte r,byte g, byte b){ HSSFPalette palette = workbook.getCustomPalette(); HSSFColor hssfColor = null; try { hssfColor= palette.findColor(r, g, b); if (hssfColor == null ){ palette.setColorAtIndex(HSSFColor.LAVENDER.index, r, g,b); hssfColor = palette.getColor(HSSFColor.LAVENDER.index); } } catch (Exception e) { logger.error(e); } return hssfColor; }

Y luego usarlo para el color de fondo:

HSSFColor lightGray = setColor(workbook,(byte) 0xE0, (byte)0xE0,(byte) 0xE0); style2.setFillForegroundColor(lightGray.getIndex()); style2.setFillPattern(CellStyle.SOLID_FOREGROUND);


Ranura libre en NPOI excel indexedcolors from 57+

Color selColor; var wb = new HSSFWorkbook(); var sheet = wb.CreateSheet("NPOI"); var style = wb.CreateCellStyle(); var font = wb.CreateFont(); var palette = wb.GetCustomPalette(); short indexColor = 57; palette.SetColorAtIndex(indexColor, (byte)selColor.R, (byte)selColor.G, (byte)selColor.B); font.Color = palette.GetColor(indexColor).Indexed;