J'utilise POI pour créer une feuille de calcul Excel en Java. J'ai le code suivant utilisé pour créer une ligne d'en-tête:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Report");
// some more code
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(cellNumber);
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setColor(HSSFColor.WHITE.index);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
Le problème que je rencontre est que la définition de la couleur d'arrière-plan de remplissage sur la cellule apparaît toujours en noir, quelle que soit la couleur que je choisis. Qu'est-ce que je fais mal? Si je n'utilise pas la ligne "setFillPattern", aucune couleur n'apparaît du tout.
Je l'ai fait fonctionner. J'ai dû définir la couleur de premier plan pour que la couleur de fond fonctionne (??).
J'ai donc changé:
cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);
à:
cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
et ça a marché!
Si vous définissez la couleur de premier plan, utilisez
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Si vous définissez la couleur d'arrière-plan, utilisez
style.setFillPattern(FillPatternType.THICK_BACKWARD_DIAG);
ou
style.setFillPattern(FillPatternType.THIN_BACKWARD_DIAG);
Les couleurs de premier plan et d'arrière-plan semblent s'empiler (rouge + bleu = violet) si vous définissez le motif de remplissage de premier plan avant le motif de remplissage d'arrière-plan, mais pas l'inverse. Vous pouvez choisir parmi plusieurs autres motifs de remplissage. Notez que la couleur ne sera pas appliquée si vous ne modifiez pas le motif de remplissage par défaut.
CellStyle.SOLID_FOREGROUND
est déconseillé dans la version 3.15+. Utilisation FillPatternType.SOLID_FOREGROUND
au lieu.