[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:
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:
wb.setSheetName(index, sheetName);
Et là, j'ai une belle exception :
Code:
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:
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.