La buona notizia è che se si utilizza XSSF, al contrario di HSSF, la soluzione al problema è abbastanza semplice. Devi semplicemente trasmettere la tua variabile di stile a XSSFCellStyle. Se lo fai, allora c'è una versione di setFillForegroundColor che accetta un argomento XSSFColor, quindi non è necessario chiamare getIndexed(). Ecco alcuni esempi di codice:
XSSFCellStyle style = (XSSFCellStyle)cell.getCellStyle();
XSSFColor myColor = new XSSFColor(Color.RED);
style.setFillForegroundColor(myColor);
Tuttavia, se si utilizza HSSF, le cose sono più difficili. HSSF usa una tavolozza di colori, che è semplicemente una serie di colori. Il valore breve che si passa a setFillForegroundColor è un indice nella tavolozza.
Quindi il problema che si verifica è la conversione di un valore rgb in un indice di tavolozza. La soluzione che hai proposto, usando getIndexed(), è logica, ma, sfortunatamente, funziona per XSSFColor nel modo in cui potresti supporre che dovrebbe.
Fortunatamente, c'è una soluzione. Per il momento, supponiamo che sarai soddisfatto utilizzando uno dei colori nella tavolozza predefinita, piuttosto che usare un colore personalizzato. In tal caso, è possibile utilizzare le classi HSSFPalette e HSSFColor per risolvere il problema. Ecco qualche esempio di codice:
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);
Se si desidera usare i colori personalizzati non già nella tavolozza di default, allora dovete aggiungerli alla tavolozza. Javadoc per HSSFPalette definisce i metodi che è possibile utilizzare per farlo.
perché è necessario getIndexed()? Per compatibilità con le versioni precedenti ?? Prova a rimuoverlo. – gtiwari333
Se si applica lo stile a una cella, viene visualizzato correttamente in rosso in Excel? – Gagravarr
Ho bisogno di getindexed perché il metodo accetta solo un valore breve. – Neets