Wie in Vlad's answer darauf, Sie aus freien Stücken Farbe Slots ausgeführt werden. Eine Möglichkeit, dies zu umgehen, wäre das Zwischenspeichern der Farben: Wann immer Sie eine RGB-Kombination ausprobieren, sollte die Routine zuerst prüfen, ob sich die Kombination im Cache befindet. Wenn es im Cache ist, sollte es dieses verwenden, anstatt ein neues von Grund auf neu zu erstellen; neue Farben würden dann nur erstellt, wenn sie noch nicht im Cache sind.
Hier ist die Implementierung, die ich verwende; es nutzt XSSF Plus Guava's LoadingCache und in Richtung generationg XSSF Farben von CSS rgb(r, g, b)
Erklärungen ausgerichtet, aber es sollte relativ trivial sein, es zu HSSF anzupassen:
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))));
}
});
Vielleicht jemand anderes schreiben Äquivalent einer HSSF könnte? ;)
Haben Sie bereits die maximale Anzahl an Farben in Ihrer Datei definiert? (Excel hat eine harte Grenze für verschiedene Dinge, wie die Anzahl oder Zeilen und Spalten, aber auch die Anzahl der Stile usw.) – Gagravarr
@kenny: Können Sie bitte eine der folgenden Antworten akzeptieren, wenn es Ihr Problem wirklich gelöst hat? – veer7