IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Documents Java Discussion :

[POI] Mettre une couleur de fond sur une cellule


Sujet :

Documents Java

  1. #1
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut [POI] Mettre une couleur de fond sur une cellule
    Bonjour à tous,

    J'utilise Apache POI 3.10. Je lis un fichier Excel 2010 et je recopie son contenu dans un nouveau fichier. Au passage, je voudrais colorier le fond des cases d'une ligne sur deux. Mais ça ne fonctionne pas... Voici mon code de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    @Test
    	public void testAjoutPrix() throws Exception {
     
    		log.debug("testAjoutPrix");
     
    		final File file1 = new File(fileName1);
     
    		// Lecture fichier original
    		final Workbook workbook = WorkbookFactory.create(file1);
    		final Sheet sheet = workbook.getSheet("Feuil1");
     
    		// Ajout d'une cellule
    		final Row titreRow = sheet.getRow(0);
    		final Cell nomCell = titreRow.getCell(0);
    		final CellStyle nomCellStyle = nomCell.getCellStyle();
     
    		// Ajout du titre "Prix" dans le meme style que les autres titres
    		final Cell prixTitreCell = titreRow.createCell(6);
    		prixTitreCell.setCellValue("Prix");
    		prixTitreCell.setCellStyle(nomCellStyle);
     
    		// Style
    		final CellStyle s = workbook.createCellStyle();
    		s.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());
    		//s.setFillPattern(CellStyle.SOLID_FOREGROUND);
    		//s.setFillPattern(CellStyle.FINE_DOTS);
    		// s.setFillPattern(CellStyle.NO_FILL);
     
    		// Modifications
    		int index = 1;
    		Row row = sheet.getRow(index++);
     
    		while (row != null) {
     
    			final Cell prixCell = row.createCell(6);
    			prixCell.setCellValue(123.45);
     
    			// Coloriage d'une ligne sur deux
    			if (index % 2 == 0) {
    				for (int i = 0; i < 7; i++) {
    					row.getCell(i).setCellStyle(s);
    				}
    			}
     
    			row = sheet.getRow(index++);
    		}
     
    		// Ecriture dans un autre fichier
    		final File file2 = new File(fileName2);
     
    		// Comme je lance le test plusieurs fois, je repart d'une copie blanche à chaque fois.
    		if (file2.exists()) {
    			file2.delete();
    		}
     
    		final FileOutputStream fos = new FileOutputStream(file2);
     
    		workbook.write(fos);
    		fos.close();
    	}
    Ca me donne la capture 01 :

    Nom : capture-01.png
Affichages : 2816
Taille : 51,2 Ko

    J'ai essayé en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s.setFillPattern(CellStyle.FINE_DOTS);
    Ca me donne la capture 02 :

    Nom : capture-02.png
Affichages : 2855
Taille : 50,6 Ko

    et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s.setFillPattern(CellStyle.SOLID_FOREGROUND);
    Ca me donne la capture 03 :

    Nom : capture-03.png
Affichages : 2757
Taille : 46,4 Ko

    Je ne comprend pas ce qui se passe...
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Et ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CellStyle style = wb.createCellStyle();
    style.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());
    style.setFillPattern(CellStyle.BIG_SPOTS);
    row.setRowStyle(style);
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    C'est pas mieux :

    Nom : capture-04.png
Affichages : 2796
Taille : 55,4 Ko

    C'est comme si ça mettait la couleur au premier plan au lieux de la mettre au fond...

    Ci-joint mon fichier excel de test
    Fichiers attachés Fichiers attachés
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Avec ça ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    package com.pictet.css.im.jira.juridique.main;
     
    import java.io.FileOutputStream;
     
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.HSSFColor;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
     
    public class Test {
    	public static void main(String[] args) throws Exception {
    		final Workbook workbook = new HSSFWorkbook();
    		Sheet sheet = workbook.createSheet("new sheet");
     
    		// Ajout d'une cellule
    		Row row = sheet.createRow((short) 0);
    		final Cell cell = row.createCell(0);
    		cell.setCellValue("test");
     
    		// Style
    		final CellStyle s = workbook.createCellStyle();
    		// s.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());
    		// s.setFillPattern(CellStyle.BIG_SPOTS);
     
    		s.setFillForegroundColor(HSSFColor.LIME.index);
    		s.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
     
    		cell.setCellStyle(s);
     
    		// Write the output to a file
    		FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    		workbook.write(fileOut);
    		fileOut.close();
     
    	}
    }
    cf: http://poi.apache.org/spreadsheet/quick-guide.html
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    PS: d'ailleurs, les IndexedColors semblent deprecated:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
     * A deprecated indexing scheme for colours that is still required for some records, and for backwards
     *  compatibility with OLE2 formats.
     *
     * <p>
     * Each element corresponds to a color index (zero-based). When using the default indexed color palette,
     * the values are not written out, but instead are implied. When the color palette has been modified from default,
     * then the entire color palette is used.
     * </p>
     *
     * @author Yegor Kozlov
     */
    public enum IndexedColors {
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  6. #6
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Ah ça marche en utilisant foreground à la place de background :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    final CellStyle s = workbook.createCellStyle();
    //s.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());
    s.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
    s.setFillPattern(CellStyle.SOLID_FOREGROUND);
    //s.setFillPattern(CellStyle.FINE_DOTS);
    // s.setFillPattern(CellStyle.NO_FILL);
    //s.setFillPattern(CellStyle.BIG_SPOTS);
    Et c'est joli :

    Nom : capture-05.png
Affichages : 2836
Taille : 51,9 Ko

    Merci beaucoup...
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Pour info, la javadoc de cellstyle dit que tu dois définir absolument le foreground avant de définir le background color

  8. #8
    Rédacteur
    Avatar de thierryler
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 078
    Points : 12 815
    Points
    12 815
    Par défaut
    Oui maintenant je vois. Mais tu avoueras que ce n'est vraiment pas intuitif.
    Thierry Leriche-Dessirier
    Consultant Java JEE Web Agile freelance
    Rédacteur pour Developpez
    Professeur de Génie Logiciel à l'ESIEA

    Site : http://www.icauda.com / Linked'in : http://www.linkedin.com/in/thierryler / Twitter : @ThierryLeriche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2000] compter des cellules avec une couleur de fond et une couleur de police
    Par darkvadave dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/11/2011, 16h36
  2. Les coins arrondis sur une couleur de fond de Table
    Par zooffy dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 05/07/2010, 12h56
  3. [WD-2007] Couleur de fond sur une seule page
    Par raks13 dans le forum Word
    Réponses: 2
    Dernier message: 10/04/2009, 14h20
  4. Affichage d'une image de fond sur une JFrame
    Par nashpimp dans le forum Agents de placement/Fenêtres
    Réponses: 21
    Dernier message: 04/08/2008, 15h26
  5. [html][debutant] couleur de fond sur une ligne
    Par yupa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 26/01/2006, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo