2011-06-23 1 views
2

J'utilise JXL pour écrire un rapport Excel. J'ai besoin d'utiliser des zones nommées pour le rapport, et j'ai des formules basées sur celles-ci. Cependant, lorsque le fichier Excel est chargé, les valeurs affichées sont incorrectes. Si je clique sur la cellule, et appuie sur Entrée, la valeur change et est correcte. Je ne peux pas comprendre comment faire apparaître la valeur correctement sur la charge. Est-ce que quelqu'un sait un moyen de forcer Excel à réévaluer, ou de fournir une valeur par défaut pour la formule?Les formules de zone nommées JXL affichent la valeur incorrecte

Ci-dessous est une version simplifiée de mon code:

excelWorkbook.addNameArea("NamedArea", excelSheet, column1, row1, column2, row2); 
Formula formula = new Formula(columnNumber, rowNumber, "COUNT(NamedArea)"); 
excelSheet.addCell(formula); 
+0

Je ne sais pas ce que jxl est, mais dans Excel/Vba vous utiliseriez excelSheet.Calculez –

+0

Merci pour l'info. Malheureusement, je dois utiliser JXL. –

Répondre

0

Peut-être que cela aide. Cherchez la méthode « setAutomaticFormulaCalculation »:

http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/index.html

+0

Pas de chance.J'ai essayé toutes les combinaisons possibles des méthodes setAutomaticFormulaCalculation et setRecalculateFormulasBeforeSave. Je commence à penser que c'est juste un problème avec JXL. –

+0

Merci pour le conseil cependant. Je suppose que ces méthodes sont ce que "devrait" résoudre le problème. Mais je pense qu'il y a juste des problèmes quelque part. Je me demande si cela a à voir avec le calendrier de la dénomination de la zone par rapport aux calculs de la formule. –

+0

De rien et bonne chance! –

0

Malheureusement, il est à la recherche comme il n'y a pas vraiment un correctif pour ce . Je pense que c'est un problème dans JXL. Je pense que pour une raison quelconque, les zones nommées ne sont pas définies avant que les formules ne soient évaluées.

3

J'ai également eu un problème avec certains champs de formule n'ayant pas les valeurs correctes, et n'ai trouvé aucune solution en ligne. Avec une enquête auto je trouve que si, par exemple, vous avez la formule suivante sur une cellule

Formula frmla = new Formula(col2, row0, "SUM(A1+A2)"); 
excelSheet.addCell(frmla); 

Ce qui suit ne produira pas un résultat dans la cellule de formule en raison de l'utilisation de l'étiquette:

Label lbl1 = new Label(col0, row0, "5", wrtbleCellFrmt); 
Label lbl2 = new Label(col1, row0, "5", wrtbleCellFrmt); 

Ce qui suit produira des résultats corrects en raison de l'utilisation de jxl.write.number:

jxl.write.Number number1 = new jxl.write.Number(col0, row0, 5, wrtbleCellFrmt); 
jxl.write.Number number2 = new jxl.write.Number(col0, row0, 5, wrtbleCellFrmt); 

Étiquette prend un paramètre chaîne tandis que le numéro prend dans un double, ce qui est probablement e e cause des résultats corrects.

0

Erreur #VALUE est venu à moi aujourd'hui aussi. Il a cette formule:

=COUNTIF('list1'!A9:'list1'!AE9,>0) 

Quand je pressais F2 et entrez sur cette cellule, il calcule bien, mais avant il a montré l'erreur: « Une valeur utilisée dans cette formule est du mauvais type de données »

J'ai utilisé la classe Number pour entrer des nombres dans cette zone, mais j'ai découvert que s'il n'y a qu'un espace vide dans cette plage (si vous ne donnez pas de valeur à tous), l'erreur apparaîtra plus tard dans la feuille de calcul.

Solution:

je me suis déplacé formule à ce même list1, dans AF9 cellulaire:

=COUNTIF(A9:AE9,>0) 

pour calculer le premier), puis copié valeur uniquement calculée de AF9 avec une autre liste

='list1'!AF9 

Cela a fonctionné ok après cela et plus de #VALUE s'est montré.

Questions connexes