2009-12-02 9 views
6

Ich verwende JExcelApi zum Generieren von XLS-Dateien. Von jxl.format.Colour, sehe ich, wie man eine der Farben in der "Standard-Excel-Farbpalette" bekommt, aber nicht, wie man eine neue Farbe erzeugt (sagen wir, angesichts seiner RGB).Neue Farben in JExcelApi erstellen

Aber in Excel selbst kann ich jede mögliche Farbe überhaupt wählen.

Vermisse ich es gerade? Gibt es in JExcelApi eine Möglichkeit, eine beliebige Farbe auszuwählen? Ich verwende gerade eine einfache Methode zum Finden der nächstliegenden Standardfarbe, die in Ordnung, aber nicht großartig ist.

Antwort

3

Excel-Versionen vor 2007 haben eine Standardpalette, und da die von Ihnen verwendete API das 2007-Format nicht unterstützt, können Sie damit nicht fertig werden. Der Grund, warum Sie eine beliebige Farbe auswählen können, liegt wahrscheinlich daran, dass Sie eine neue Version von Excel verwenden.

Siehe this information on the Microsoft site.

Ich sehe nicht, wie Sie die Standardfarbpalette in der API, die Sie verwenden, überschreiben können, aber in Apache POI (mit dem Sie auch Excel-Dateien schreiben können) können Sie: siehe this link. Was Sie tun müssen, ist im Wesentlichen: Weisen Sie Ihren Zellen bestimmte Standardfarben zu (grün, usw.); dann überschreiben diese Farben mit welcher benutzerdefinierten Farbe Sie benötigen.

+0

Dies ist ein guter Start, danke. Ich werde die Apache-POI-Quelle überprüfen, um zu sehen, ob das Ändern der Standardpalette schwierig ist. – Ken

+0

Leider ist dies nicht die Antwort, aber ich bin nicht länger berechtigt, meine Meinung zu ändern - wenn Sie nach der tatsächlichen Lösung suchen, sehen Sie sich die unten stehende Antwort von "Damien B" an (setColourRGB). – Ken

15

Die Art und Weise einen Palettenindex in JExcel API außer Kraft zu setzen ist, das Verfahren zu verwenden, [setColorRGB] [1] in der beschreibbaren Arbeitsmappe. Zum Beispiel:

myWorkbook.setColourRGB(Colour.LIGHT_TURQUOISE2, 14, 67, 89); 

Wenn Sie den Farbwert im Paletteneintrag ändern möchten, wo standardmäßig das zweite Licht türkis ist. Oder noch einfacher in einigen Fällen direkt mit dem Palettenindex:

myWorkbook.setColourRGB(Colour.getInternalColour(myPaletteIdx), 14, 67, 89); 

Ein kleines Update: nur die Indizes 8-64 kann innerhalb des Quellcodes von jxl.biff.PaletteRecord nach einem Kommentar angepasst werden.

[1]: http://jexcelapi.sourceforge.net/resources/javadocs/current/docs/jxl/write/WritableWorkbook.html#setColourRGB(jxl.format.Colour, int, int, int)

+0

Das sieht perfekt aus! Vielen Dank! (Leider lässt mich SO das nicht als die "richtige" Antwort markieren.) – Ken

+0

Sie hätten die Antwort immer noch verbessern können :-) Ich habe eine Notiz hinzugefügt: Wenn der angeforderte Index streng unter 8 liegt, wird der Aufruf von setColourRGB wird still ignoriert. –

5
WritableCellFormat cellFormat = new WritableCellFormat(); 

Colour customColor = new Colour(10000, "1", 255, 0, 0){  
}; 

cellFormat.setBackground(customColor); 
writableCell.setCellFormat(cellFormat);