web-dev-qa-db-fra.com

La définition de la couleur de premier plan pour HSSFCellStyle sort toujours en noir

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.

44
Ascalonian

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é!

72
Ascalonian

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.

8
dizzy