Formule Excel Pas La Mise À Jour De Cellule
Je suis en utilisant apache POI pour modifier les cellules dans une feuille excel. Après je change les valeurs, les cellules contenant des formules correspondant à des cellules qui ont été modifiés sont pas mise à jour.
Quand je vais dans excel et cliquez sur la cellule contenant la formule, puis cliquez sur dans la barre de fonctions, la formule des mises à jour.
J'ai les options de calcul de la mise à jour automatique.
Exemple rapide.
Ligne :
[A2 + A3] [1] [2]
A1 ici serait égal à 3
Quand je le changer à l'aide de POI:
[A2+A3] [2] [5]
A1 toujours égale à 3 jusqu'à ce que je clique sur la cellule.
Actualisation du classeur ou d'une feuille aussi ne fonctionne pas. Est-ce un problème avec excel ou PVE? Quelqu'un peut-il penser à une solution de contournement?
Les autres ont répondu sans une telle description, et cette description est un peu hors de propos dans cette situation.
OriginalL'auteur PandaBearSoup | 2013-07-29
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez XSSF classeurs, vous pouvez ré-évaluer toutes les cellules de calcul comme suit:
Une API similaire existe si vous utilisez un HSSF classeur:
Ou, selon exactement comment vous vous êtes préparé et que vous essayez d'obtenir accompli, vous devriez être capable de trouver votre solution ici
Le Pourquoi Évaluer des Formules section de l'Apache POI documentation explique pourquoi vous avez besoin de le faire, je vous suggère de lire à travers cette
OriginalL'auteur akokskis
Dans le cas où votre feuille a une formule pour dire
A3=sum(A1:A2)
est calculé et il fonctionne très bien avecA1=5, A2 =4.
Maintenant, si le changement de la valeur de A2 avec 2 commesh.getRow(0).getCell(0).setCellValue(2);
//set A1=2et d'effectuer une opération d'écriture, vérifiez la valeur de A3 elle se montre toujours de 9. Il semble erroné mais actully pas. Le point est que Excel caches résultats déjà calculés et vous avez besoin de déclencher le recalcul à la mise à jour.
wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
ou avec
wb.setForceFormulaRecalculation(true);
et puis effectuez l'opération d'Écriture. Cela vous donnera le résultat correct. Pour Le Détail vérifiez ici
Je n'ai pas suffisamment de réputation pour publier le commentaire, pour la solution ci-dessus. J'ai donc collé la solution.
merci beaucoup!!! wb.setForceFormulaRecalculation(true); => a fonctionné comme un charme pour moi!
OriginalL'auteur nilamber
Vous devez explicitement déclencher un nouveau calcul. Voir le Recalcul des Formules de la section ici sur pourquoi & comment le faire.
OriginalL'auteur Eugen Constantin Dinca