web-dev-qa-db-fra.com

XSSFCellStyle setFillForegroundColor et setFillBackgroundColor ne fonctionnent pas

J'ai essayé d'utiliser setFillForegroundColor et setFillBackgroundColor pour changer la couleur de cellule d'un fichier Excel.

Cependant, j'ai échoué et je ne savais vraiment pas quel était le problème. J'ai googlé pendant de nombreuses heures et je n'ai toujours pas trouvé la bonne façon de définir la couleur.

Voici le code que j'écris:

import Java.awt.Color;
import Java.io.File;
import Java.io.FileOutputStream;

import org.Apache.poi.xssf.usermodel.XSSFCell;
import org.Apache.poi.xssf.usermodel.XSSFCellStyle;
import org.Apache.poi.xssf.usermodel.XSSFColor;
import org.Apache.poi.xssf.usermodel.XSSFRow;
import org.Apache.poi.xssf.usermodel.XSSFSheet;
import org.Apache.poi.xssf.usermodel.XSSFWorkbook;

public class TestColor {
    public static void main(String[] args) {
        File f = new File("test.xlsx");
        XSSFWorkbook wb = new XSSFWorkbook();
        XSSFSheet sheet = wb.createSheet();
        XSSFRow row = sheet.createRow(0);
        XSSFCell cell = row.createCell(0);
        cell.setCellValue("no blue");

        // set the color of the cell
        XSSFCellStyle style = wb.createCellStyle();
        XSSFColor myColor = new XSSFColor(Color.BLUE);
        style.setFillForegroundColor(myColor);
        style.setFillBackgroundColor(myColor);
        cell.setCellStyle(style); // this command seems to fail

        try {
            FileOutputStream fos = new FileOutputStream(f);
            wb.write(fos);
            wb.close();
            fos.flush();
            fos.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

Et c'est le résultat final.

enter image description here

Comment définir la couleur de la cellule sur bleu?

J'utilise poi-bin-3.12-20150511.Zip de https://poi.Apache.org/download.html

12
Brian

Vous devrez peut-être ajouter la ligne suivante après avoir défini la couleur de premier plan:

style.setFillPattern(CellStyle.SOLID_FOREGROUND);
20
McNultyyy

SetFillPattern attend FillPatterType, donc plutôt ceci:

style.setFillPattern(FillPatternType.SOLID_FOREGROUND)
11
Gwidion