Impossible de définir une couleur personnalisée dans XIDFCell Apache POI

J'essaie de définir une couleur personnalisée (à partir de hexcode ou rgb) à une xssfcell. Mais la couleur de la cellule devient noire même si je donne une autre couleur. J'ai essayé de le faire de la manière suivante:

File xlSheet = new File("C:\\Users\\IBM_ADMIN\\Downloads\\Excel Test\\Something3.xlsx"); System.out.println(xlSheet.createNewFile()); FileOutputStream fileOutISPR = new FileOutputStream("C:\\Users\\IBM_ADMIN\\Downloads\\Excel Test\\Something3.xlsx"); XSSFWorkbook isprWorkbook = new XSSFWorkbook(); XSSFSheet sheet = isprWorkbook.createSheet("TEST"); XSSFRow row = sheet.createRow(0); XSSFCellStyle cellStyle = isprWorkbook.createCellStyle(); byte[] rgb = new byte[3]; rgb[0] = (byte) 24; // red rgb[1] = (byte) 22; // green rgb[2] = (byte) 219; // blue XSSFColor myColor = new XSSFColor(rbg); cellStyle.setFillForegroundColor(myColor); cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); cellStyle.setAlignment(HorizontalAlignment.CENTER); XSSFCell cell = row.createCell(0); cell.setCellValue("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has"); cell.setCellStyle(cellStyle); CellRangeAddress rangeAddress = new CellRangeAddress(0, 0, 0, 2); sheet.addMergedRegion(rangeAddress); int width = ((int)(90 * 0.73)) * 256; sheet.setColumnWidth(cell.getColumnIndex(), width); //sheet.autoSizeColumn(cell.getColumnIndex()); RegionUtil.setBorderBottom(XSSFCellStyle.BORDER_MEDIUM, rangeAddress, sheet, isprWorkbook); RegionUtil.setBottomBorderColor(IndexedColors.RED.getIndex(), rangeAddress, sheet, isprWorkbook); XSSFCell cell2 = row.createCell(11); cell2.setCellValue("222222222222222"); isprWorkbook.write(fileOutISPR); 

// FIN du programme

  XSSFCellStyle cellStyle = isprWorkbook.createCellStyle(); byte[] rgb = new byte[3]; rgb[0] = (byte) 24; // red rgb[1] = (byte) 22; // green rgb[2] = (byte) 219; // blue XSSFColor myColor = new XSSFColor(rgb); cellStyle.setFillForegroundColor(myColor);//1st method //cellStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128)));//2nd method //XSSFColor myColor = new XSSFColor(Color.decode("0XFFFFFF")); cellStyle.setFillForegroundColor(myColor);//3rd Method 

J'ai essayé de nombreuses autres façons mentionnées dans les réponses aux questions connexes, mais aucune de ces réponses n'a résolu mon problème. Sil te plait aide moi.

Ceci est dû à une incomplétude du package org.apache.poi.ss.util .

PropertyTemplate ainsi que CellUtil et RegionUtil sont basés sur le niveau ss.usermodel uniquement et non sur le niveau xssf.usermodel . Mais org.apache.poi.ss.usermodel.CellStyle ne sait pas quelque chose sur un setFillForegroundColor(Color color) jusqu'à maintenant. Il connaît seulement setFillForegroundColor(short bg) . Donc, le niveau ss.usermodel ne peut pas définir une Color comme Color de premier plan de remplissage jusqu'à maintenant. Seul un short (un indice de couleur) est possible.

S'il s'agit de la question de savoir s'il est nécessaire de définir la couleur lorsque la bordure doit être définie à l'aide de org.apache.poi.ss.util alors la réponse est nécessaire, car les deux, la couleur et la bordure sont dans le même CellStyle . C'est pourquoi, lorsque vous ajoutez les parameters de bordure au CellStyle , les parameters de couleur doivent être maintenus et enfin être définis à nouveau.

Donc en conclusion, il n'y a pas moyen de sortir de ce dilemme. Si vous avez besoin d'utiliser org.apache.poi.ss.util vous ne pouvez pas utiliser setFillForegroundColor(XSSFColor color) au même moment. Le seul espoir est setFillForegroundColor(Color color) sera ajouté à org.apache.poi.ss.usermodel.CellStyle dans les versions ultérieures de apache poi .