Come sottolineato in Vlad's answer, si è a corto di slot liberi colore. Un modo per aggirare il problema sarebbe quello di mettere in cache i colori: ogni volta che provi una combinazione RGB, la routine dovrebbe prima verificare se la combinazione è nella cache; se è nella cache, dovrebbe usarlo invece di crearne uno nuovo da zero; i nuovi colori verrebbero quindi creati solo se non sono ancora nella cache.
Ecco l'implementazione che utilizzo; utilizza XSSF più Guava's LoadingCache ed è orientata verso i colori XSSF generationg da CSS rgb(r, g, b)
dichiarazioni, ma dovrebbe essere relativamente banale per adeguarlo alle 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))));
}
});
Forse qualcun altro potrebbe inviare un HSSF equivalente? ;)
fonte
2018-03-09 14:00:57
Hai già definito il numero massimo di colori nel tuo file? (Excel ha un limite rigido su varie cose, come il numero o le righe e le colonne, ma anche sul numero di stili, ecc.) – Gagravarr
@kenny: puoi considerare di accettare le risposte qui sotto se davvero ha risolto il tuo problema? – veer7