2010-05-10 14 views
38

J'utilise POI pour créer une feuille de calcul Excel en Java. Je le code suivant utilisé pour la création d'une ligne d'en-tête:La définition de la couleur de premier plan pour HSSFCellStyle sort toujours en noir

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); 

La question que j'ai est que le réglage de la couleur de fond de remplissage sur la cellule est toujours noir, peu importe de quelle couleur je prends. Qu'est-ce que je fais mal? Si je n'utilise pas la ligne "setFillPattern", aucune couleur n'apparaît du tout.

Répondre

64

Je me suis mis au travail. J'ai dû définir la couleur de premier plan pour faire fonctionner la couleur de fond (??).

Je changé:

cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index); 

à:

cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); 

et cela a fonctionné!

+5

Ah, je comprends. J'ai besoin de changer la couleur de premier plan pour changer la couleur de fond - génie! – Pakman

+2

Sauvé de nombreuses heures de désespoir, quelqu'un sait pourquoi cela fonctionne de cette façon? – CGK

+4

Je pense que la cellule est peinte avec un motif composé de pixels de premier plan et d'arrière-plan. Si vous utilisez SOLID_FOREGROUND, seul le pixel de premier plan est visible. Cette couleur est différente de la couleur utilisée pour le rendu du texte, qui est définie avec la police. – Axel

5

Si vous réglez 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-semblent pour 'empiler' (rouge + bleu = violet) si vous définissez le motif de remplissage de premier plan avant le remplissage de fond patt ern, mais pas l'inverse. Il existe plusieurs autres modèles de remplissage que vous pouvez choisir. 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 obsolète dans la version 3.15+. Utilisez plutôt FillPatternType.SOLID_FOREGROUND.

+0

Une bonne explication de 'style.setFillForegroundColor (IndexedColors.GREY_25_PERCENT.getIndex()); \t \t \t style.setFillPattern (FillPatternType.SOLID_FOREGROUND); 'qui m'a aidé, merci +1): - – Yash