Apache POI évaluer la formule
J'ai quelques formules dans les cellules de ma feuille, et je tiens à les évaluer après que je l'insérer certaines valeurs. Ex :
Ma formule est =SUM(B1,B2)
Avant les valeurs de l'insertion B1
valeur a été 1
, et B2
valeur a été 3
, et le résultat de la formule est 4
Après l'insertion de valeurs B1 a de la valeur 5
, et B2 a de la valeur 2
mais la formule produit toujours 4
, comment puis-je évaluer/déclencheur de ce calculé?
Naturellement, après avoir cliqué sur le bouton de retour sur la formule de la cellule de la nouvelle valeur 7
est calculé, il est un moyen de déclencher ce sans interaction manuelle?
Je suis à l'aide d'excel 2007, de sorte XSSFWorkbook
MODIFIER/MISE À JOUR :
J'ai utilisé Gabors solution avant qu'il l'a posté mais je suis en utilisant comme référence, voici ce qui se passe :
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.ss.formula.WorkbookEvaluator.<init>(Lorg/apache/poi/ss/formula/EvaluationWorkbook;Lorg/apache/poi/ss/formula/IStabilityClassifier;Lorg/apache/poi/hssf/record/formula/udf/UDFFinder;)V
at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.<init>(XSSFFormulaEvaluator.java:64)
at org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator.<init>(XSSFFormulaEvaluator.java:51)
...............
...............
Voici une partie du code :
public XSSFFormulaEvaluator getEvaluator(){
if(evaluator == null){
evaluator = new XSSFFormulaEvaluator(wb);
}
return evaluator;
}
réellement appeler l'évaluateur :
//where index is int, and mycell is int
row = (XSSFRow) sheet.getRow(index);
cell = row.createCell(mycell);
getEvaluator().evaluateFormulaCell(cell);
Je suis à la recherche de quelqu'un utilise ce et a été un succès, pas ceux qui google solution sans vraiment de l'essayer, j'ai été googler beaucoup de choses à dire au moins.
Par Gagravar suggestion j'ai 2 Pi sur mon classpath :
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8-beta1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.7</version>
</dependency>
Je si j'ai besoin de 3,7 version pour XSSF classeurs etc.
SOLUTION :
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8-beta2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8-beta2</version>
</dependency>
veuillez voir ma mise à jour
C'est votre problème. Votre PI versions doivent correspondre. Vous aurez envie de 3,8-beta1 (ou encore mieux 3.8-beta2) pour les deux principaux PI pot, et le pi-ooxml. Vous ne pouvez pas le mix and match de PI pots entre les versions!
veuillez fournir une certaine forme de réponse afin que je puisse l'accepter
Sûr, c'est fait. Content que ça fonctionne!
OriginalL'auteur ant | 2011-04-19
Vous devez vous connecter pour publier un commentaire.
À promouvoir un commentaire à une réponse...
Abord de vous devez vous assurer que vous utilisez la même version de POI pour les principaux bocal, et l'OOXML partie. Maven extrait montrait 3.7 pour l'un, et de 3,8 bêta 1 pour les autres. Vous devez vous assurer qu'ils sont tous les deux la même chose. (Vous pourriez même utiliser 3.8-beta2 qui vient de sortir).
Ensuite, utilisez:
ou:
Voir http://poi.apache.org/spreadsheet/eval.html pour plus de détails
Salutations à partir de 2017 🙂 Merci pour la réponse! C'est exactement ce que je cherchais 🙂 pour info
evaluateFormulaCell
est déprécié en pve 3.17 etformulaEvaluator.evaluateInCell(cell);
devrait être utilisé à la place.Je pense que vous êtes dans l'erreur - evaluateFormulaCell n'est toujours pas obsolète!
evaluateInCell
fait quelque chose de différent, il remplace la formule avec le résultat de l'evalmais evaluateInCell() ne fonctionne pas pour plus de 255 colonnes? quelle est la raison de cette.
OriginalL'auteur Gagravarr
Peut-être XSSFFormulaEvaluator
.evaluateAllFormulaCells(XSSFWorkbook wb)
?(ou plus précisément:
evaluateFormulaCell(Cell cell)
.)Si cela ne fonctionne pas: quelle est la version de POI que vous utilisez? Formules dans XSSF sont pris en charge à partir de la v3.5.
Aussi, essayez d'utiliser XSSFCreationHelper d'instancier votre Évaluateur de Formule suggérée par le PI docs.
Voir poi.apache.org/spreadsheet/eval.html - quel Gabor suggéré devrait fonctionner parfaitement.
Je l'ai déjà fait, avez-vous déjà utilisé avec succès ?
Oui, fonctionne très bien pour moi. Fonctionne également très bien pour quelques centaines de tests unitaires au sein de POI...
OriginalL'auteur egbokul
si vous utilisez HSSF essayer :
OriginalL'auteur imKalpesh
Vous pouvez utiliser cette.
OriginalL'auteur Tanmay kumar shaw