2009-12-02 15 views
6

J'utilise JExcelApi pour générer des fichiers XLS. De jxl.format.Colour, je vois comment obtenir l'une des couleurs dans la "palette de couleurs Excel standard", mais pas comment créer une nouvelle couleur (par exemple, compte tenu de son RVB).Créer de nouvelles couleurs dans JExcelApi

Mais dans Excel lui-même, je peux choisir n'importe quelle couleur du tout.

Suis-je simplement absent? Existe-t-il un moyen dans JExcelApi de sélectionner une couleur arbitraire? J'utilise une simple méthode find-the-nearest-standard-color pour le moment, ce qui est OK mais pas génial.

Répondre

3

Les versions d'Excel antérieures à 2007 ont une palette standard, et étant donné que l'API que vous utilisez ne prend pas en charge le format 2007, vous risquez de vous retrouver dans cette situation. La raison pour laquelle vous pouvez choisir n'importe quelle couleur est probablement parce que vous utilisez une nouvelle version d'Excel.

Voir this information on the Microsoft site. Je ne vois pas comment vous pourriez remplacer la palette de couleurs standard dans l'API que vous utilisez, mais dans Apache POI (qui vous permet également d'écrire des fichiers Excel), vous pouvez: this link. Fondamentalement, ce que vous devez faire est: affecter certaines couleurs standard (vert, etc) à vos cellules; puis remplacez ces couleurs avec la couleur personnalisée dont vous avez besoin.

+0

C'est un bon début, merci. Je vais vérifier la source de POI Apache pour voir si le changement de la palette standard semble difficile. – Ken

+0

Malheureusement, ce n'est pas la réponse, mais je ne suis plus autorisé à changer d'avis pour une raison quelconque - si vous cherchez la solution actuelle, voir la réponse de "Damien B" ci-dessous (setColourRGB). – Ken

15

La façon de passer outre un index de la palette dans l'API JExcel est d'utiliser la méthode [setColourRGB] [1] sur le classeur inscriptible. Par exemple:

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

si vous voulez changer la valeur de couleur dans l'entrée de la palette où il y a par défaut la deuxième lumière turquoise. Ou, dans certains cas, plus facilement, directement avec l'index de la palette:

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

Une petite mise à jour: seuls les indices de 8 à 64 peuvent être personnalisés selon un commentaire dans le code source de jxl.biff.PaletteRecord.

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

+0

Cela semble parfait! Merci! (Malheureusement, SO ne me laissera pas marquer cela comme la réponse "correcte".) – Ken

+0

Vous auriez encore pu augmenter la réponse :-) J'ai ajouté une note: si l'index demandé est strictement inférieur à 8, l'appel à setColourRGB est silencieusement ignoré. –

5
WritableCellFormat cellFormat = new WritableCellFormat(); 

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

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