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 APACHE : Couleur Entête fichier Excel


Sujet :

Documents Java

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur Développement/Intégration
    Inscrit en
    Mai 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Développement/Intégration
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 30
    Points : 42
    Points
    42
    Par défaut POI APACHE : Couleur Entête fichier Excel
    Bonjour,

    Voici une opération qui renvoie le style de la cellule.

    En paramètre j'ai :
    . le classeur
    . 1 tableau en int contenant toujours que 3 occurrences et qui peremettra de définir la couleur de la cellule
    . et le libellé du type de ligne qui sera "ENTETE" de l'onglet Excel ou "CORPS" du fichier Excel

    Pour simplifier et faire un focus sur le problème, j'ai rajouter au début de l'opération dans le cas de l'entête de remplir le tableau des couleurs RGB, pour que chaque champs de l'entête soit toujours de couleur VERT.

    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
     
        // Opération qui en fonction des codes couleur RGB données en int, va donner en sortie le style de cellule
        public XSSFCellStyle styleDynamique(XSSFWorkbook e_classeur, int[] e_tableauCodeCouleurRGBFondDeCellule, String e_libelleTypeDeLigne) {
     
            // declaration des varibales locales
            XSSFCellStyle s_styleDeLaCellule = null;
            Color l_couleur = null;
            IndexedColorMap l_indexedColorMap = null;
            XSSFColor l_xSSFCouleur = null;
            Font l_police = null;
     
            // Code mis pour test
            if ("ENTETE".equals(e_libelleTypeDeLigne)) {
                // Coloration en vert
                e_tableauCodeCouleurRGBFondDeCellule[0] = 76;
                e_tableauCodeCouleurRGBFondDeCellule[1] = 153;
                e_tableauCodeCouleurRGBFondDeCellule[2] = 0;
            }
     
            // Positionnement de la couleur de l'onglet en fonction des codes couleur reçu en entrée - palette de couleur RGB
            l_couleur = new Color(e_tableauCodeCouleurRGBFondDeCellule[0], e_tableauCodeCouleurRGBFondDeCellule[1],
                    e_tableauCodeCouleurRGBFondDeCellule[2]);
            l_indexedColorMap = e_classeur.getStylesSource().getIndexedColors();
            l_xSSFCouleur = new XSSFColor(l_couleur, l_indexedColorMap);
     
            s_styleDeLaCellule = e_classeur.createCellStyle();
     
            // attribution de la couleur en fond de cellule
            s_styleDeLaCellule.setFillForegroundColor(l_xSSFCouleur);
            s_styleDeLaCellule.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            // s_styleDeLaCellule.setFillPattern(FillPatternType.FINE_DOTS);
            // s_styleDeLaCellule.setFillPattern(FillPatternType.BIG_SPOTS);
     
            // s_styleDeLaCellule.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());
            // s_styleDeLaCellule.setFillPattern(FillPatternType.SOLID_FOREGROUND);
     
            // Rajout de bordures Fines pour chaque cellule
            s_styleDeLaCellule.setBorderBottom(BorderStyle.THIN);
            s_styleDeLaCellule.setBorderLeft(BorderStyle.THIN);
            s_styleDeLaCellule.setBorderRight(BorderStyle.THIN);
            s_styleDeLaCellule.setBorderTop(BorderStyle.THIN);
     
            // attribution de la couleur noire pour les bordures
            s_styleDeLaCellule.setBottomBorderColor(IndexedColors.BLACK.getIndex());
            s_styleDeLaCellule.setLeftBorderColor(IndexedColors.BLACK.getIndex());
            s_styleDeLaCellule.setRightBorderColor(IndexedColors.BLACK.getIndex());
            s_styleDeLaCellule.setTopBorderColor(IndexedColors.BLACK.getIndex());
     
            // changer la couleur de la police si Entete
            l_police = e_classeur.createFont();
     
            if ("ENTETE".equals(e_libelleTypeDeLigne)) {
                l_police.setColor(IndexedColors.WHITE.getIndex());
            } else {
                l_police.setColor(IndexedColors.BLACK.getIndex());
            }
     
            s_styleDeLaCellule.setFont(l_police);
     
            return s_styleDeLaCellule;
        }
    Toutes les cellules CORPS seront toujours coloré comme il se doit. Par contre les cellules entêtes reste toujours en blanc, ce qui n'est pas normal, car elles devrait être de couleur verte. Je ne comprends pas pourquoi. Est ce que quelqu'un aurait une idée ?


    Voici une copie d'ecran du fichier en sortie :

    Nom : 2021-05-05-TB_SyntheseFluxDescendant.png
Affichages : 543
Taille : 55,9 Ko

    Par avance merci.

    Bien à vous.

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur Développement/Intégration
    Inscrit en
    Mai 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Développement/Intégration
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 30
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Le problème venait de l'opération appelante :

    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
    62
    63
    64
    
        public XSSFWorkbook dechargementObjetJavaDansOngletExcelFlexible(XSSFWorkbook e_classeur, String e_nomDOnglet) {
    
            // declaration des variables locales
            XSSFSheet l_onglet = null;
            Row l_ligne = null;
    
            String l_valeur = null;
            String l_titreDeLaColonne = null;
            int l_longeurDuTitre = 0;
            int l_numeroOrdreOnglet = 0;
    
            Cell l_cellule = null;
            Cell l_cellulePremiereColonne = null;
            GestionDuStyle l_gestionDuStyle = new GestionDuStyle();
            // CellStyle l_styleDeLaCellule = null;
    
            Color l_couleur = null;
            IndexedColorMap l_indexedColorMap = null;
            XSSFColor l_xSSFCouleur = null;
    
            XSSFCellStyle l_styleCellule = null;
            int[] l_tableauCodeCouleurRGB = new int[3];
    
    ...
    
    
            // boucle sur les colonnes de l'entête
            for (int i = 0; i < this.getaEnteteDuTableau().length; i++) {
    
                l_ligne.createCell(i).setCellValue(this.getaEnteteDuTableau()[i]);
    
                l_cellule = l_ligne.getCell(i);
    
                // valorisation du tableau des couleurs de fond de cellule RGB pour l'entête
                l_tableauCodeCouleurRGB = colorationDesEntetesDOnglets(e_nomDOnglet, i);
    
                l_styleCellule = l_gestionDuStyle.styleDynamique(e_classeur, l_tableauCodeCouleurRGB, "ENTETE");
    
                // Ici on modifie la couleur de la cellule
                l_cellule.setCellStyle(l_styleCellule);
    
                // redimensionnement de la colonne en fonction de la valeur qui se trouve dans la cellule
                // l_onglet.autoSizeColumn(i);
    
                // Recuperation du libelle de la colonne
                l_titreDeLaColonne = l_cellule.getStringCellValue();
    
                ReferentielDesFlux.aJournal.fine("Philippe - Le nom de la colonne est : " + l_titreDeLaColonne);
    
                // Recuperation de la longueur du libelle
                l_longeurDuTitre = l_titreDeLaColonne.length();
    
                // Dimensionnement de la cellule qui correspondra à la longueur du libellé + 3 caractères
                // pour prevoir la place de la flèche de filtre qui est à droite de la cellule
                l_onglet.setColumnWidth(i, ((l_longeurDuTitre + 3) * 256));
    
            }
    
    ...
    
            return e_classeur;
        }
    J'avais tout simplement omis de rendre effectif la mise à jour de la modification de couleur de la cellule (voir code en ROUGE et GRAS) ...

    Je ferme donc cette discussion, qui est donc maintenant résolue.

    Bien à vous.

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

Discussions similaires

  1. Apache POI: récupérer les noms de colonnes d'un fichier excel
    Par cedy-kassy dans le forum Général Java
    Réponses: 2
    Dernier message: 25/03/2014, 12h35
  2. [POI] Erreur dans mon fichier Excel à l'ouverture
    Par mouss4rs dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 08/03/2012, 14h42
  3. Ajouter des couleurs à un Fichier Excel existant
    Par param_cat dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 16/06/2010, 11h38
  4. [WD11] Couleur dans fichier excel
    Par nemrod66 dans le forum WinDev
    Réponses: 1
    Dernier message: 10/03/2010, 21h57
  5. [POI] Création d'un fichier excel
    Par Shixz dans le forum Documents
    Réponses: 1
    Dernier message: 12/07/2006, 11h45

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