La buena noticia es que si está utilizando XSSF, a diferencia de HSSF, entonces la solución a su problema es bastante fácil. Simplemente debe convertir su variable de estilo a XSSFCellStyle. Si lo hace, entonces hay una versión de setFillForegroundColor que toma un argumento XSSFColor, por lo que no necesita llamar a getIndexed(). Aquí es un código de ejemplo:
XSSFCellStyle style = (XSSFCellStyle)cell.getCellStyle();
XSSFColor myColor = new XSSFColor(Color.RED);
style.setFillForegroundColor(myColor);
Sin embargo, si está utilizando HSSF, entonces las cosas son más difíciles. HSSF usa una paleta de colores, que es simplemente una matriz de colores. El valor corto que pasa a setFillForegroundColor es un índice en la paleta.
Entonces, el problema que tiene es convertir un valor de rgb en un índice de paleta. La solución que usted propuso, usando getIndexed(), es lógica, pero desafortunadamente, funciona para XSSFColor de la manera en que podría suponerse.
Afortunadamente, hay una solución. Por el momento, supongamos que estará satisfecho utilizando uno de los colores en la paleta predeterminada, en lugar de utilizar un color personalizado. En ese caso, puede usar las clases HSSFPlette y HSSFColor para resolver el problema. Este es un código de ejemplo:
HSSFWorkbook hwb = new HSSFWorkbook();
HSSFPalette palette = hwb.getCustomPalette();
// get the color which most closely matches the color you want to use
HSSFColor myColor = palette.findSimilarColor(255, 0, 0);
// get the palette index of that color
short palIndex = myColor.getIndex();
// code to get the style for the cell goes here
style.setFillForegroundColor(palIndex);
Si desea utilizar los colores personalizados no está ya en la paleta predeterminada, entonces usted tiene que añadirlos a la paleta. El javadoc para HSSFPalette define los métodos que puede usar para hacerlo.
¿por qué necesita getIndexed()? Por compatibilidad con versiones anteriores? Intenta eliminar eso. – gtiwari333
Si aplica el estilo a una celda, ¿se muestra correctamente en rojo en Excel? – Gagravarr
Necesito getindexed porque el método solo aceptará un valor corto. – Neets