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

Entrée/Sortie Java Discussion :

[apache POI] wb.setSheetName exception : "not implemented yet"


Sujet :

Entrée/Sortie Java

  1. #1
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut [apache POI] wb.setSheetName exception : "not implemented yet"
    Bonjour,

    J'utilise apache poi pour la manipulation d'un fichier excel dans lequel j'ai environ 90 onglets avec quelques 800 formules sur chaque onglet.

    La génération de la deuxième moitié des onglets se fait automatiquement à l'aide du code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheet = wb.cloneSheet(sheetIndex);
    Jusque là, tout va bien. Mais l'onglet que je clone contient des formules faisant référence à des cellules dans des onglets externes (pas au classeur mais à l'onglet en cours). Autrement dit, ces formules font référence à d'autres onglets.

    Quand je veux renommer l'onglet, je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb.setSheetName(index, sheetName);
    Et là, j'ai une belle exception :

    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
    java.lang.RuntimeException: not implemented yet
        at org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook.getExternalSheetIndex(XSSFEvaluationWorkbook.java:127)
        at org.apache.poi.ss.formula.FormulaParser.createAreaRefParseNode(FormulaParser.java:615)
        at org.apache.poi.ss.formula.FormulaParser.parseRangeable(FormulaParser.java:510)
        at org.apache.poi.ss.formula.FormulaParser.parseRangeExpression(FormulaParser.java:268)
        at org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1119)
        at org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1079)
        at org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1066)
        at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1426)
        at org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1526)
        at org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1510)
        at org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1467)
        at org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1447)
        at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:1568)
        at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:176)
        at org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils.updateName(XSSFFormulaUtils.java:142)
        at org.apache.poi.xssf.usermodel.helpers.XSSFFormulaUtils.updateSheetName(XSSFFormulaUtils.java:97)
        at org.apache.poi.xssf.usermodel.XSSFWorkbook.setSheetName(XSSFWorkbook.java:1252)
        at mon.package.ExcelWriter.renameSheets(ExcelWriter.java:184)
        at mon.package.ExcelWriter.write(ExcelWriter.java:93)
        at mon.package.ExcelWriter.DBExcelWriterTest.testWrite(DBExcelWriterTest.java:83)
    En fait, il passe dans une méthode qui réévalue toutes les formules du classeur.

    Il passe dans la méthode suivante de la classe FormulaParser de poi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static Ptg[] parse(String formula, FormulaParsingWorkbook workbook, int formulaType, int sheetIndex) {
            FormulaParser fp = new FormulaParser(formula, workbook, sheetIndex);
            fp.parse();
            return fp.getRPNPtg(formulaType);
        }
    Les valeurs des paramètres :
    formula : [1]Janvier!#REF!
    formulaType : 4
    sheetIndex : -1 !!! (ce que je ne comprends pas...)


    Il passe plusieurs fois dans cette méthode, et j'ai deux fois la valeur [1]Janvier!#REF! dans le paramètre formula. Et c'est à la deuxieme qu'il lève l'exception.

    Avez-vous une idée pour régler ce problème.

    Merci beaucoup.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  2. #2
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Question posée sur le forum de poi :
    - la librairie ne gère pas encore les références externes.
    - sheetIndex == -1 si le scope du nom est dans le workbook en cours
    - solution à mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb.getCTWorkbook().getSheets().getSheetArray(index).setName(sheetName);
    Ce code accède au classeur en xml car les fichiers xlsx sont des fichiers pouvant être dézippé et contiennet des fichiers xml éditables.

    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/06/2007, 12h54
  2. Réponses: 2
    Dernier message: 08/03/2007, 09h44
  3. Réponses: 1
    Dernier message: 13/02/2007, 09h07
  4. exception "is not mapped"
    Par decksroy dans le forum Hibernate
    Réponses: 4
    Dernier message: 08/11/2006, 14h32
  5. 'operator+' not implemented in type ....
    Par zackrel dans le forum C++
    Réponses: 14
    Dernier message: 27/04/2006, 11h06

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