Un FormatException exceptionnel

Un FormatException exceptionnel - C#/.NET managed - Programmation

Marsh Posté le 15-06-2010 à 14:43:29    

Bonjour,  
 
Voilà, j'ai un programme qui lit des données dans un fichier Excel, ma variable RangeVal contient :

Code :
  1. Range RangeVal = (Range)worksheet.Cells[ligne, colonne];


Là où ca plante c'est sur cette ligne : (valeurBDD est un type int)

Code :
  1. valeurBDD = int.Parse(RangeVal.Text.ToString().Trim().Replace(',', '.'));


Le programme tourne bien jusqu'à tomber sur des valeurs à virgule où là j'ai ce message d'erreur :
 
           

Code :
  1. System.FormatException: Le format de la chaîne d'entrée est incorrect.
  2.    à System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
  3.    à System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
  4.    à ****_***.maMethode(Worksheet worksheet, String type, String aidClient, String aidOperation) dans ******.aspx.cs:ligne 487


Note :
RangeVal.Text.ToString().Trim().Replace(',', '.') vaut 4.0
 
J'ai essayé de virer le replace au cas où c'était à cause du parametrage régionnal, j'ai essayé de cast en double et mettre valeurBDD en double mais rien y fait je ne sais plus où chercher avez vous une piste ?


---------------
Pire qu'une pierre dans la chaussure, est un grain de sable dans la capote.  Coluche.
Reply

Marsh Posté le 15-06-2010 à 14:43:29   

Reply

Marsh Posté le 15-06-2010 à 15:24:16    

manu f a écrit :

Bonjour,  
 
Voilà, j'ai un programme qui lit des données dans un fichier Excel, ma variable RangeVal contient :

Code :
  1. Range RangeVal = (Range)worksheet.Cells[ligne, colonne];


Là où ca plante c'est sur cette ligne : (valeurBDD est un type int)

Code :
  1. valeurBDD = int.Parse(RangeVal.Text.ToString().Trim().Replace(',', '.'));


Le programme tourne bien jusqu'à tomber sur des valeurs à virgule où là j'ai ce message d'erreur :
 
           

Code :
  1. System.FormatException: Le format de la chaîne d'entrée est incorrect.
  2.    à System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
  3.    à System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
  4.    à ****_***.maMethode(Worksheet worksheet, String type, String aidClient, String aidOperation) dans ******.aspx.cs:ligne 487


Note :
RangeVal.Text.ToString().Trim().Replace(',', '.') vaut 4.0
 
J'ai essayé de virer le replace au cas où c'était à cause du parametrage régionnal, j'ai essayé de cast en double et mettre valeurBDD en double mais rien y fait je ne sais plus où chercher avez vous une piste ?


 
Bonjour,
 
Je ne suis pas sur de ce que tu as ecrit mais si je comprends bien tu essayes de mettre la valeur 4.0 dans un int c'est bien cela?


---------------
The secret of happiness is not in doing what one likes but in liking what one has to do Sir James M. Barrie
Reply

Marsh Posté le 15-06-2010 à 15:32:36    

FLeFou a écrit :


 
Bonjour,
 
Je ne suis pas sur de ce que tu as ecrit mais si je comprends bien tu essayes de mettre la valeur 4.0 dans un int c'est bien cela?


+1
c'est pas Int.Parse qu'il faut utiliser, mais Double.Parse (ou bien Convert.ToDouble)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-06-2010 à 15:32:36    

Tes paramètres régionaux ils disent quoi ?
En simplifiant au maximum (on oublie excel, interop et cie, on appelle en dur int.Parse avec les différents cas possibles), tu n'arrives pas à élucider le truc ?
A mon avis, int.Parse ne doit pas aimer les décimaux en entrée, il faut peut être d'abord parser en Double/Single et ensuite caster en int.

 

edit : en fait j'en suis même sûr :D.


Message édité par TotalRecall le 15-06-2010 à 15:35:23

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 15-06-2010 à 15:51:21    

Je viens de corriger le bug (depuis ce matin je suis dessus quand même -_-').
 
Les Convert etc... j'avais déjà testé et j'avais toujours le même problème, la seule chose que j'ai testé et qui fonctionne c'est :
 

Code :
  1. if (RangeVal.Text.ToString().Trim().IndexOf(',') > 0)
  2. {
  3.        string vari = RangeVal.Text.ToString().Trim().Substring(0, RangeVal.Text.ToString().Trim().IndexOf(','));
  4.        //appendMessage("Vari :"+vari);
  5.        valeurBDD = Convert.ToInt32(vari);
  6. }
  7. else
  8. {
  9.        valeurBDD = Convert.ToInt32(RangeVal.Text.ToString().Trim().Replace(',', '.'));
  10. }


Ca doit pas être la meilleur façon de faire, mais je dois avouer que ce bug m'a pris la tête et le client assez pressé ^^.
 
Merci quand même pour vos réponses :)

Message cité 1 fois
Message édité par manu f le 15-06-2010 à 15:53:45

---------------
Pire qu'une pierre dans la chaussure, est un grain de sable dans la capote.  Coluche.
Reply

Marsh Posté le 15-06-2010 à 16:00:34    

manu f a écrit :

Je viens de corriger le bug (depuis ce matin je suis dessus quand même -_-').
 
Les Convert etc... j'avais déjà testé et j'avais toujours le même problème, la seule chose que j'ai testé et qui fonctionne c'est :
 

Code :
  1. if (RangeVal.Text.ToString().Trim().IndexOf(',') > 0)
  2. {
  3.        string vari = RangeVal.Text.ToString().Trim().Substring(0, RangeVal.Text.ToString().Trim().IndexOf(','));
  4.        //appendMessage("Vari :"+vari);
  5.        valeurBDD = Convert.ToInt32(vari);
  6. }
  7. else
  8. {
  9.        valeurBDD = Convert.ToInt32(RangeVal.Text.ToString().Trim().Replace(',', '.'));
  10. }


Ca doit pas être la meilleur façon de faire, mais je dois avouer que ce bug m'a pris la tête et le client assez pressé ^^.
 
Merci quand même pour vos réponses :)


 
Si je comprends bien ton code dans le 1er cas si c'est 4,0 alors tu substring de facon a garder seulement le 4  
Parcontre ton else tu remplace la virgule par un point mais tu n'y vas que si il n'y a pas de virgule dans ton élément donc je vois pas trop pq tu fais cela ^^
 
Enfin si cela fonctionne et que tu l'a bien testé c'est l'important.


---------------
The secret of happiness is not in doing what one likes but in liking what one has to do Sir James M. Barrie
Reply

Marsh Posté le 15-06-2010 à 17:20:49    

T'as raison j'ai oublié de virer le replace, on va mettre ça sur le coup de la fatigue :D


---------------
Pire qu'une pierre dans la chaussure, est un grain de sable dans la capote.  Coluche.
Reply

Marsh Posté le 15-06-2010 à 17:22:19    

manu f a écrit :

T'as raison j'ai oublié de virer le replace, on va mettre ça sur le coup de la fatigue :D


 
C'est ce que j'avais supposé ;)
 
a+


---------------
The secret of happiness is not in doing what one likes but in liking what one has to do Sir James M. Barrie
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed