Como se ha señalado en Vlad's answer, se están quedando sin ranuras de color libres. Una forma de evitarlo sería almacenar en caché los colores: cada vez que pruebe una combinación de RGB, la rutina primero debe verificar si la combinación está en el caché; si está en la caché, entonces debería usar esa en lugar de crear una nueva desde cero; los nuevos colores solo se crearían si aún no están en caché.
Aquí está la implementación que uso; que utiliza XSSF más Guava's LoadingCache y se orienta hacia los colores XSSF generationg de CSS rgb(r, g, b)
declaraciones, pero debe ser relativamente trivial para adaptarla 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 otra persona puede publicar HSSF equivalente? ;)
¿Ya ha definido la cantidad máxima de colores en su archivo? (Excel tiene un límite estricto en varias cosas, como el número o filas y columnas, pero también en el número de estilos, etc.) – Gagravarr
@kenny: ¿puede considerar aceptar una de las respuestas a continuación si realmente resolvió su problema? – veer7