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 colorisation de cellule par formule Excel


Sujet :

Documents Java

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut POI colorisation de cellule par formule Excel
    Bonjour à tous.
    Je viens vers vous car je n’arrive pas à résoudre une implémentation graphique au travers de l’utilisation de la librairie POI.
    L’import des données et l’export au format Excel fonctionne sans soucis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Row row = sheet.createRow(i);
    cell = row.createCell(0);
    cell.setCellValue(nom +" :");
    cell.setCellStyle(csBold);
     
    cell = row.createCell(2);
    cell.setCellValue(somme);
    cell = row.createCell(3);
    cell.setCellValue(sommeObj);
    cell = row.createCell(4);
    cell.setCellValue(cumulSomme);
    cell = row.createCell(5);
    cell.setCellValue(cumulSommeObj);
    Ex de l'import :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // appel de la méthode calculSomme pour le mois courant
    somme=calculSomme("V_STATS_GRATUIT_ESP",true,annee,mois);
    J’arrive même à initialiser des cellules en fonction d’un calcule Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Row rowTotal = sheet.createRow(12);
    cell = rowTotal.createCell(1);
    cell.setCellValue("Total :");
    cell = rowTotal.createCell(2);
    cell.setCellType(Cell.CELL_TYPE_FORMULA);
    cell.setCellFormula("SUM(C5:C11)"); 
    cell = rowTotal.createCell(3);
    cell.setCellType(Cell.CELL_TYPE_FORMULA);
    cell.setCellFormula("SUM(D5:D11)");
    Par contre je n'arrive pas à colorer une cellule en fonction d'une autre, par exemple si la somme de C1 est inférieur à la somme de C2, coloriser la cellule C1 en bleu.

    J'ai essayé beaucoup de solution, j'ai obtenue un résultat mais vue que j'utilise des boucles pour implémenter les valeurs, la totalité de la colonne est colorisé.

    J'ai essayé avec:
    -.getRow(4).getCell(2).getNumericCellValue()
    - if ("=$C$5 < =$D$5")
    - ainsi que beaucoup d'autres syntaxes plus ou moins exotiques

    Bref, j'arrive pas retomber sur mes pieds, si vous avez une idée, une piste de travail ou un retour d'expérience, je prends avec grand plaisir.

    Merci par avance pour votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Pour faire du formattage conditionnel, il faut utiliser ConditionalFormattingRule.

    1. On récupère le HSSFSheetConditionalFormatting sur le sheet.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       HSSFSheetConditionalFormatting sheetCf =  sheet.getSheetConditionalFormatting();
    2. On créé une règle :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      HSSFConditionalFormattingRule cfRule = sheetCf.createConditionalFormattingRule(...);
      La règle peut être indiquée de différentes manières :

      • Opérateur de comparaison avec une donnée (par exemple "est supérieur à 0") plus une formule (ça peut être une valeur ou une formule dépendant de valeur de cellules) ;
      • Opérateur , plus 2 formules, pour les opérateurs d'intervalles (genre "entre 90 et 100")
      • Une formule (expression conditionnelle) : le formattage est appliqué quand la formule est vraie


      Voir CFRuleRecord.ComparisonOperator pour les opérateurs.

    3. On créé en suite un formatage

      Par exemple, pour formater la couleur, on utilisera un PatternFormatting ;

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      fillPattern = cfRule.createPatternFormatting();
      Puis on affecte ce qu'on veut, par exemple, la couleur de texte en rouge :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      fillPattern.setFillForegroundColor(IndexedColors.RED.index);
    4. Ensuite on détermine sur quoi on va appliquer la formule, par un CellRange :

      Par exemple :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       CellRangeAddress[] regions = {  CellRangeAddress.valueOf("A3:E10") };
    5. Puis on l'applique la règle :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
       sheetCf.addConditionalFormatting(regions, cfRule);
      On peut appliquer plusieurs règles d'un coup, en passant un tableau.



    voir

    l'aide rapide sur le formattage conditionnel ;
    Démo
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    Merci énormément, c'est impressionnant.
    J'essaye dès demain matin !!!!
    Encore merci

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    Merci beaucoup, c'est parfait !!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/02/2014, 15h52
  2. effectuer des filtres par formules excel
    Par moimemessssssssss dans le forum Excel
    Réponses: 4
    Dernier message: 27/01/2014, 21h49
  3. Réponses: 6
    Dernier message: 20/11/2008, 15h55
  4. [POI] Appeler une cellule par son nom
    Par Galak extra dans le forum Documents
    Réponses: 9
    Dernier message: 17/06/2008, 14h33
  5. Réponses: 2
    Dernier message: 06/04/2007, 12h17

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