Partage
  • Partager sur Facebook
  • Partager sur Twitter

Apache POI Formula #VALEUR

    26 juillet 2013 à 12:28:42

    Bonjour à tous,

    J'ai une application JAVA qui écrit des formules dans un classeur EXCEL.

    Dans une cellule (autre que A1) lorsque j'écris la formule avec POI IF(LEN(A1)>4, MID(A1,4,2), A1)  et que je la fais calculer par Excel à l'ouverture, EXCEL me met #VALEUR.

    Par contre, lorsque je rentre en édition sur la cellule contenant la formule et que je valide la cellule, ma formule est calculée correctement

    Avez vous une idée du PB ?

    D'avance merci

    • Partager sur Facebook
    • Partager sur Twitter
      29 juillet 2013 à 16:13:19

      Hello RickHunterSDF1.

      Je n'ai aucune idée de pourquoi ce problème apparait, cependant il y a peut être moyen de le contourner. Avec la librairie [Apache POI] tu remplis ta cellule avec ta formule comme si c'était une simple chaine de caractère ; d'ailleurs il faut placer le " = " pour qu'Excel comprenne qu'il s'agisse d'une formule.

      Donc remplis ta cellule avec cette chaine de caractère : '=IF(LEN(A1)>4, MID(A1,4,2),A1)

      Le " ' " est pour dire à Excel que le contenu de la cellule est une chaine de caractère. Ensuite à l'ouverture de ton classeur [j'imagine que tu as une macro VBA déclenchée à l'ouverture] tu ajoutes la ligne suivante : Sheets(1).Cells(x, y).FormulaLocal = Sheets(1).Cells(x, y).Value

      Bien entendu tu dois adapter la ligne selon ton besoin ; Sheets(1) -> la feuille 1 de ton classeur Excel ; x -> la ligne de la cellule et y -> la colonne de la cellule. La ligne de code permet à Excel de dire que la formule de la cellule doit correspondre à la valeur de la cellule (qui est ta formule en fait).

      Cordialement, MatiChoux.

      • Partager sur Facebook
      • Partager sur Twitter

      Le Kansas City Shuffle.. c’est quand tout le monde regarde à gauche et que tu vas à droite.

        30 juillet 2013 à 15:03:33

        Bonjour MatiChoux,

        Merci pour ta réponse. Malheureusement, je ne veux et je ne dois surtout pas avoir de macro.
        Dans POI, il ne faut pas le "=" devant la formule. POI l'inscrit tout seul.

        s'il y a d'autres idées,.....

        Cordialement

        -
        Edité par RickHunterSDF1 30 juillet 2013 à 15:04:03

        • Partager sur Facebook
        • Partager sur Twitter
          30 juillet 2013 à 16:42:45

          Bonjour,

          J'ai testé chez moi et je peux faire deux remarques :

          • Ta formule marche pas en xls et marche en xlsx
          • Quand il créé le fichier il transforme la fonction en : =SI(NBCAR(A1)>4;STXT(A1;4;2);A1)

          Je sais pas si ça t'aide. Que contient A1 ?

          Il m'est arrivé par ailleur de rencontrer des problèmes d'affichage/rafraichissement, notament sur des styles à l'ouverture juste après la génération, par exemple certains cadre de cellules avaient pas la bonne épaisseur, en faisant faisant scrolldown/scrollup, ça rafraichissait les cellules et mettait le bon style.

          -
          Edité par Govipi 30 juillet 2013 à 16:45:37

          • Partager sur Facebook
          • Partager sur Twitter
          Facilitez vos recrutement de développeurs avec Staff Fit
            30 juillet 2013 à 17:12:19

            Merci Govipi,

            oui, effectivement, ça fonctionne en xlsx mais pas en xls (qui est malheureusement le format dont j'ai besoin).

            Le contenu de A1 est pour mon test "abcdefgh".

            Ce que je n'arrive pas à comprendre, c'est que Excel convertit bien la formule anglaise en formule française mais ne la calcule pas.
            Par contre, si on presse la touche F2 dans la cellule et que l'on valide la cellule, la formule se calcule.

            Cordialement

            • Partager sur Facebook
            • Partager sur Twitter
              30 juillet 2013 à 17:39:44

              Ok j'ai exactement le même comportement que toi.
              Le plus étrange c'est que :

              • LEN(A1) marche direct
              • IF(LEN(A1)>4,A1,A1) marche direct
              • MID(A1,4,2) marche direct)
              Faudrait continuer à tester tout pour, j'essaie ce soir si j'ai le temps, sinon demain
              • Partager sur Facebook
              • Partager sur Twitter
              Facilitez vos recrutement de développeurs avec Staff Fit
                31 juillet 2013 à 9:28:53

                Oui, c'est ce que j'ai remarqué.

                Il semblerait que ce soit la combinaison de IF et MID dans le résultat qui ne fonctionne pas:

                • IF (1=1, MID(A1,4,2), A1) ne fonctionne pas
                • IF (1>2, A1, MID(A1,4,2)) ne fonctionne pas
                • IF (MID(A1,4,2)="ab", A1, "bad") marche direct

                -
                Edité par RickHunterSDF1 31 juillet 2013 à 9:35:09

                • Partager sur Facebook
                • Partager sur Twitter
                  31 juillet 2013 à 10:06:53

                  J'ai trouvé !
                  Tu utilises :

                  HSSFFormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator( workbook );
                  .
                  .
                  .
                  .
                  formulaCell.setCellFormula( "MA_FORMULE" );
                  formulaEvaluator.evaluateInCell( formulaCell );  

                  Et pour copierune valeur d'une cellule vers une autre en évaluant la formule :

                  CellValue evaluatedCellValue = formulaEvaluator.evaluate( cellA );  
                  cellB.setCellValue( evaluatedCellValue.getNumberValue() );  






                  -
                  Edité par Govipi 31 juillet 2013 à 10:09:58

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Facilitez vos recrutement de développeurs avec Staff Fit
                    31 juillet 2013 à 12:20:34

                    La formule doit rester dans mon classeur or evaluateInCell écrase la formule dans la cellule.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 juillet 2013 à 13:21:48

                      Zut, Au temps pour moi. Je vois pas trop là du coup. Il ne resteplus que regarder le source. Je m'y mets dès que j'ai le temps
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Facilitez vos recrutement de développeurs avec Staff Fit
                        1 août 2013 à 9:30:36

                        Il semblerai que ce soit un problème sur le MID d'une cellule. si l'on met un texte statique, le MID est bien calculé:

                        • IF (1=1, MID(A1,4,2), A1) ne fonctionne pas
                        • IF (1=1, MID("abcdefgh",4,2), A1) fonctionne parfaitement.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 mars 2021 à 16:50:37

                          Salut,

                          J'ai eu le même problème récemment. Ce poste à presque réussi à m'aider.

                          Voici la solution que j'ai pu trouver : Avant la sauvegarde de mon workbook j'évalue l'ensemble des cellules via la ligne suivante :

                          myWorkbook.getCreationHelper().createFormulaEvaluator().evaluateAll();

                          En espérant que ça puisse aider quelqu'un.

                          Cordialement,

                          QBDH

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Apache POI Formula #VALEUR

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown