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 :

Pb avec POI et la modification d'un fichier Excel


Sujet :

Documents Java

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Pb avec POI et la modification d'un fichier Excel
    Bonjour, je dois générer des tableaux de bord, en partant d'une trame (fichier excel) contenant déjà des formules (pourcentages, sommes, ...) et une mise en page.

    Je souhaite donc simplement remplir des cellules avec des valeurs provenant d'une base de données. Le nombre de lignes peut varier.

    J'ai pas eu trop de souci, mais j'ai constaté que les formules ne sont pas appliquées ! C'est à dire qu'il faut que l'utilisateur revienne sur le fichier Excel, édite une case concernée par une formule pour que la formule s'applique !

    Qqn a t'il déjà rencontré le pb ? C'est très emm...

    D'autre part, j'aimerai savoir s'il est possible de faire l'équivalent d'un "Copier ligne, insérer les cellules copiées", avec tout ce que cela entraine sur Excel (conservation des styles, mises à jour des formules, etc)

    Merci !

    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
     
            POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("c:\\TableauDeBord2.xls"));
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            HSSFSheet s = wb.getSheetAt(0);
            HSSFRow r = null;
            HSSFCell c = null;
     
            short rownum = 0;
     
            for (rownum = (short) 9; rownum < 11; rownum++)
            {
                r = s.getRow(rownum);
     
                // Les styles sont bien conservés, mais les formules pas appliqués !!!
     
                c = r.getCell((short) 1); c.setCellValue(20);
                c = r.getCell((short) 2); c.setCellValue(53);
                c = r.getCell((short) 3); c.setCellValue((double) 1068);
     
                c = r.getCell((short) 4); c.setCellValue("Suisse");
                c = r.getCell((short) 5); c.setCellValue(51);
                c = r.getCell((short) 6); c.setCellValue(1024);
     
                //Si on fait ça, les formules sont bien appliquées (uniquement avec createCell ??)
                //Mais du coup, c'est fastidieux, et il faut revoir le formatage de la valeur (%,...) 
                //c = r.createCell((short) 7); c.setCellType(HSSFCell.CELL_TYPE_FORMULA); 
                //c.setCellFormula("G10/$I$3*$K$3/D10");
     
                c = r.getCell((short) 8); c.setCellValue(85);
                c = r.getCell((short) 9); c.setCellValue(924);
     
                c = r.getCell((short) 11); c.setCellValue(913);
                c = r.getCell((short) 12); c.setCellValue(75);
                c = r.getCell((short) 13); c.setCellValue(1192);
            }
     
            // Imposssible d'enlever une ligne ==> Height=0
     
                s.getRow((short) 12).setHeight((short) 0);
                s.getRow((short) 13).setHeight((short) 1);
     
            // Write the output to a file
            FileOutputStream fileOut = new FileOutputStream("c:\\test_TDB.xls");
            wb.write(fileOut);
            fileOut.close();

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 27
    Points
    27
    Par défaut
    j'ai aussi le meme probleme l'as tu résolu?

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    plus ou moins.

    il existe une méthode qui permet d'exécuter la formule d'une cellule.
    c'est relativement peu performant.

    globalement, les événements Excel ne sont pas exécutés. il faut tout simuler dans POI.

    d'une manière générale, POI n'est pas du tout adapté à la constitution d'un fichier Excel complexe. il faut se contenter de tableaux à plat, et laisser de coté les fonctionnalités Excel.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par alfouik Voir le message
    plus ou moins.

    il existe une méthode qui permet d'exécuter la formule d'une cellule.
    c'est relativement peu performant.

    globalement, les événements Excel ne sont pas exécutés. il faut tout simuler dans POI.

    d'une manière générale, POI n'est pas du tout adapté à la constitution d'un fichier Excel complexe. il faut se contenter de tableaux à plat, et laisser de coté les fonctionnalités Excel.
    Merci pour ta reponse
    Pourrais tu préciser la méthode qui permet d'exécuter la formule d'une cellule et ce que signifie il faut tout simuler dans POI?

  5. #5
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 99
    Points : 44
    Points
    44
    Par défaut insertion ,repetition lignes et colonnes dans une feuille excel
    Bonjour,

    Je dois générer un fichier contenant des lignes à générer dynamiquement. J'interroge une table dans laquelle il y'a des clients (nom, prenom, salaire,etc )et les clients peuvent varier en fonction du mois.
    Je cherche donc comment insérer plusieurs lignes dans une feuille excel . Sachant qu'il y'a également des formules dans les colonnes..

    Pouvez-vous m'aider svp.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    J'ai pas eu trop de souci, mais j'ai constaté que les formules ne sont pas appliquées ! C'est à dire qu'il faut que l'utilisateur revienne sur le fichier Excel, édite une case concernée par une formule pour que la formule s'applique !
    Vérifie que l'option recalcul auto est cochée sur ta feuille excel car sur JXL je n'ai pas ce pb sinon teste avec {F9} (recalcul).
    Sur access j'ai eu ce pb que j'ai solutionné en adjoignant au classeur un module VBA qui faisait un enregistré-sous dès l'ouverture puis une réouverture ce qui avait pour effet de valider ttes les formules.
    Autre piste les nombres collés dans tes cellules sont peut-être en format texte, donc modifie tes formules pour les convertir en nbre avec CNUM(cellule)

    par contre si vous avez une solution pour mon pb de caractères diacritiques je suis preneur > http://www.developpez.net/forums/sho...d.php?t=521630

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 68
    Points : 221
    Points
    221
    Par défaut
    Je bosse sous Excel 2003, sur un modèle de classeur dans lequel je dois injecter des valeurs qui seront utilisées par des formules


    Dans mon cas, le mode Audit de formules était activé, ce qui avait pour effet de conserver l'affichage des formules, même si les calculs étaient faits.
    En désactivant ce mode, on peut voir le résultat des formules, notamment des 0 et des #VALEUR!

    --> Allez dans Outils > Audit de formules > Mode Audit de formules (raccourci = CTRL + ").



    Ensuite, passons à POI : il faut forcer le calcul des formules de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monHSSFWorkbook.getSheet("nomDeMaFeuille").setForceFormulaRecalculation(true);
    Ceci pour chaque feuille, il n'y a pas de méthode pour un classeur entier.

    Il s'agit d'un attribut, propre à chaque feuille, c'est à dire qu'il est possible de positionner cette attribut à true avant ou après l'injection des valeurs (autrement dit, la méthode ne refait pas les calculs lorsqu'on l'appelle, mais ces calculs seront effectués à l'ouverture du classeur).

    Au poil !!!



    Ma config :
    - Excel 2003
    - POI 3.0.2 final

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 68
    Points : 221
    Points
    221
    Par défaut
    Sinon, pour évaluer les formules sans ouvrir le classeur Excel : http://poi.apache.org/hssf/eval.html

Discussions similaires

  1. modifications d'un fichier excel
    Par starwaso dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/01/2014, 13h37
  2. Réponses: 2
    Dernier message: 29/09/2011, 14h26
  3. [POI] Ecriture à la suite d'un fichier Excel
    Par Titelouve dans le forum Documents
    Réponses: 0
    Dernier message: 22/10/2010, 12h06
  4. [POI] Problème écriture/lecture dans un fichier Excel
    Par steuve dans le forum Documents
    Réponses: 6
    Dernier message: 02/07/2007, 15h47
  5. Date de modification d'un Fichier Excel
    Par lamama dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/06/2007, 16h01

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