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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part sheet = wb.cloneSheet(sheetIndex);
Quand je veux renommer l'onglet, je fais ça :Et là, j'ai une belle exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part wb.setSheetName(index, sheetName);
En fait, il passe dans une méthode qui réévalue toutes les formules du classeur.
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)
Il passe dans la méthode suivante de la classe FormulaParser de poi :
Les valeurs des paramètres :
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); }
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.
Partager