2010-08-31 7 views
1

J'utilise Apache Poi et Java pour la manipulation excel.J'ai modifié certains de la cellule dans le fichier Excel en utilisant par programmation java. Après cela, quand j'ouvre ce fichier Excel manuellement pour voir cette mise à jour, après avoir vu, quand j'essaie de fermer le fichier Excel, il me demande de nouveau "Voulez-vous enregistrer les modifications que vous avez apportées au fichier test.xls? .s'il vous plaît aider à résoudre mon problème dans apache poi et exceler

si j'appuyez sur le bouton Oui, alors que je peux en mesure de lire les valeurs de cellule de formule programatically further.otherwise, si je avoir accès à la valeur de la cellule de formule retourne 0 valeur ....

Comment résoudre ce problème ....

Veuillez me guider pour obtenir cette solution

+1

Pourriez-vous s'il vous plaît donner un peu de code comment vous avez modifié votre feuille Excel? –

+0

vous devriez changer votre résumé de question de «s'il vous plaît aider à résoudre mon problème dans apache poi et exceler» à quelque chose de plus précis sur votre problème, que je ne suis pas capable de comprendre sans un exemple. – rsilva4

Répondre

4

Par défaut, POI lit la réponse mise en cache à la formule lorsque vous lisez cette cellule. Lorsque vous ouvrez le fichier avec Excel, il fera les calculs. Ensuite, lorsque vous enregistrez le fichier, les réponses sont enregistrées. Puis quand vous le lisez avec poi, vous obtenez les bonnes réponses.

Si vous voulez la bonne réponse, vous devez calculer la réponse de la formule. La dernière fois que j'avais besoin de faire cela, je devais écrire mon propre analyseur, mais maintenant il y a ceci: http://poi.apache.org/spreadsheet/eval.html.

Ou bref:

Workbook wb = new HSSFWorkbook(inputstream); 
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); 
... snip ... 
CellValue value = evaluator.evaluate(cellWithFormula); 
+0

La méthode la plus rapide pour recalculer toutes les formules est HSSFFormulaEvaluator.evaluateAllFormulaCells (wb); – Pino

0

ne peut pas encore poster des commentaires donc je vais laisser une réponse nouvelle. Joeri réponse est correcte pour une seule cellule

Pour cellules multiples, il est plus efficace d'utiliser le folowing:

FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator(); 
fe.evaluateAll(); 

qui mettra à jour en fait la valeur de la formule en cache.

ensuite les obtenir, vous ferez comme vous le feriez pour tout autre cellule, par exemple:

cell.getCellStringValue(); 

Cette méthode est utile d'utiliser si vous devez réévaluer un classeur entier.

Prenez note que le jour où j'écris seule la version 3.10-beta1 POI de POI peuvent évaluer les formules en utilisant les dates

Questions connexes