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.