Il POI di Apache riempie la cella XSSF con il nero al posto del colore personalizzato desiderato quando si applica un bordo PropertyTemplate

Sto scrivendo un programma che dovrebbe creare un foglio di calcolo Excel con alcune celle che sono riempite di arancio, dato il text e hanno dato un bordo utilizzando un PropertyTemplate . Ho scritto con successo il codice per farlo in HSSF, ma ora sto lavorando su XSSF e non riesco a farlo funzionare.

Ciò che sta accadendo è che le celle si riempiono con il colore arancione corretto e il text va bene anche nelle celle, ma applicando il PropertyTemplate rende le cellule arancioni diventano nere. Qualcuno sa un modo per questo?

Ecco il codice che ho.

 XSSFCellStyle orangeFillStyle = wb.createCellStyle(); orangeFillStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 192, 0))); orangeFillStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

Poi c'è un integer gruppo di codice / algorithm per capire quali celle devono riempire di colore arancione e quali celle per mettere il text. Sottolineo le celle usando il codice:

 currCell.setCellStyle(orangeFillStyle); 

Alla fine della creazione del foglio è il codice PropertyTemplate (bordo):

 BorderStyle dividerStyle = BorderStyle.THIN; PropertyTemplate borderTemplate = new PropertyTemplate(); borderTemplate.drawBorders(new CellRangeAddress(0, 0, 0, 13), dividerStyle, BorderExtent.BOTTOM); borderTemplate.drawBorders(new CellRangeAddress(0, 0, 1, 13), dividerStyle, BorderExtent.TOP); borderTemplate.drawBorders(new CellRangeAddress(0, rowI, 1, 13), dividerStyle, BorderExtent.VERTICAL); borderTemplate.drawBorders(new CellRangeAddress(rowI, rowI, 0, 13), dividerStyle, BorderTextent.BOTTOM); borderTemplate.applyBorders(sheet); 

Se borderTemplate.applyBorders(sheet); il commento sulla borderTemplate.applyBorders(sheet); line, il colore di riempimento sembra benissimo. Ovviamente non ho alcun bordo sul mio foglio se lo faccio comunque. È come non posso avere un colore di riempimento personalizzato e bordi allo stesso tempo. Qualcuno sa perché questo potrebbe accadere o un modo per farlo?

IndexedColor che se utilizzo un IndexedColor anziché un colore personalizzato, il riempimento ei bordi funzionano bene. L'unico problema è che non mi piacciono i colors indicizzati. Ecco il codice che uso per IndexedColor :

 XSSFCellStyle orangeFillStyle = wb.createCellStyle(); orangeFillStyle.setFillForegroundColor(IndexedColors.ORANGE.getIndex()); orangeFillStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

Solutions Collecting From Web of "Il POI di Apache riempie la cella XSSF con il nero al posto del colore personalizzato desiderato quando si applica un bordo PropertyTemplate"

Beh, sembra che sia un bug con Apache POI. Ho notato che qualcuno ha postato nel suo inseguitore di bug un po 'di tempo fa e che esiste ancora nella versione 3.16.

Se qualcun altro incontra questo problema, la mia soluzione è stata quella di mettere il PropertyTemplate (i bordi) prima di riempire le cellule con la mia arancia personalizzata. Significava modificare in modo significativo il codice, ma adesso funziona.