2009-12-02 15 views
6

Estoy usando JExcelApi para generar archivos XLS. Desde jxl.format.Colour, veo cómo obtener cualquiera de los colores en la "paleta de colores estándar de Excel", pero no cómo crear un nuevo color (por ejemplo, dado su RGB).Creando nuevos colores en JExcelApi

Pero en Excel en sí, puedo elegir cualquier color.

¿Lo estoy perdiendo? ¿Hay alguna forma en JExcelApi para seleccionar un color arbitrario? Estoy usando un método simple de encontrar el color estándar más cercano en este momento, lo cual está bien pero no es genial.

Respuesta

3

Las versiones de Excel anteriores a 2007 tienen una paleta estándar, y dado que la API que está utilizando no es compatible con el formato 2007, es posible que se quede con eso. La razón por la que puede elegir el color que desee es probablemente porque está utilizando una nueva versión de Excel.

Ver this information on the Microsoft site.

No veo cómo podría sobrescribir la paleta de colores estándar en la API que está utilizando, pero en Apache POI (que también le permite escribir archivos de Excel) puede: ver this link. Básicamente, lo que debe hacer allí es: asignar ciertos colores estándar (verde, etc.) a sus celdas; luego anula estos colores con el color personalizado que necesites.

+0

Este es un gran comienzo, gracias. Revisaré la fuente de POI de Apache para ver si el cambio de la paleta estándar parece difícil. – Ken

+0

Lamentablemente, esta no es la respuesta, pero por alguna razón ya no puedo cambiar de opinión. Si está buscando la solución real, consulte la respuesta de "Damien B" a continuación (setColourRGB). – Ken

15

La manera de anular un índice de la paleta en la API JExcel es utilizar el método [setColourRGB] [1] en el libro de escritura. Por ejemplo:

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

si desea cambiar el valor del color en la entrada de la paleta donde hay por defecto la segunda luz turquesa. O, más fácilmente en algunos casos, directamente con el índice de la paleta:

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

Una pequeña actualización: sólo los índices de 8 a 64 se pueden personalizar de acuerdo a un comentario en el código fuente 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

¡Esto se ve perfecto! ¡Gracias! (Lamentablemente, SO no me deja marcar esto como la respuesta "correcta"). – Ken

+0

Aún podría haber aumentado la respuesta :-) He agregado una nota: si el índice solicitado está estrictamente por debajo de 8, la llamada a setColourRGB es ignorado silenciosamente –

5
WritableCellFormat cellFormat = new WritableCellFormat(); 

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

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