Tester le type d'une valeur??? [Résolu]

Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Dernière intervention
15 septembre 2005
- - Dernière réponse : phantom_2005
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Dernière intervention
1 septembre 2010
- 23 janv. 2007 à 11:04
Salut a tous,

Voila mon probleme :
Je travail sur une feuille excel dont je récupère certaines valeur que je stock une à une dans un COleVariant. Le probleme c'est que j'aimerai savoir comment tester le type de cette valeur (string, int,float.....) pour pouvoir la stocker dans le tablo qui convient (string tab_str[] , int tab_int[] , float tab_float[] ou .....).

Merci, bonne journée.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
34
3
Merci
VARIANT possède un champ 'vt' qui est l'indicateur de ce qu'englobe le variant.

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 87 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Dernière intervention
15 septembre 2005
0
Merci
Merci BruNews, en chechant une peu, j'ai trouvé.
Commenter la réponse de freepouy18
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Dernière intervention
1 septembre 2010
1
0
Merci
Bonjour,

j'ai un peu le meme type de probleme!

voici mon code:

-----------------------------------------------------------------------------
 if(!objApp.CreateDispatch("Excel.Application"))
 {
  AfxMessageBox("Couldn't start Excel.");
 }else
 {
  objApp.SetVisible(true);
  objBooks = objApp.GetWorkbooks();
  objBook = objBooks.Open(PATH_FILE_EXCEL,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional,
   VOptional);
  objSheets = objBook.GetWorksheets();
  objSheet = objSheets.GetItem(COleVariant((short)1)); //=Feuil1


  m_cEdit.GetWindowText(tmp);
  range = objSheet.GetRange(COleVariant(tmp),VOptional);
  range.Select();


  x.vt = VT_BSTR;
  x = range.GetValue(VOptional);
  tmp.Format("%s",x.bstrVal);
  m_cEdit.SetWindowText(tmp);
-----------------------------------------------------------------------------

Le probleme est que je ne recupere que le premier caractere de la chaine!
Je voudrais avoir toute la chaine

Merci pour votre aide!



--------------------------------------------------------------------------------
Phantom_2005
Commenter la réponse de phantom_2005
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
34
0
Merci
Vérifie que tu n'aies pas un prob UNICODE <=> ANSI dans
tmp.Format("%s",x.bstrVal);
x.bstrVal ne serait-il pas UNICODE ?

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Dernière intervention
1 septembre 2010
1
0
Merci
En effet BruNews le x.bstrVal est defini en UNICODE.

D'ou mon probleme, mais comment recuperer la chaine entiere retournée dans le VARIANT x?

--------------------------------------------------------------------------------
Phantom_2005
Commenter la réponse de phantom_2005
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
34
0
Merci
Teste si ton _bstr_t x n'a pas un opérateur char*
tmp.Format("%s", (char*) x.bstrVal);

pas trop le temps d'aller plus loin, j'ai du taf.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
34
0
Merci
ou en plus long:

tmp.Format("%s", (char*) (_bstr_t) x);

ou truc de ce genre.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Dernière intervention
1 septembre 2010
1
0
Merci
J'ai toujours que le premier caractere de ma chaine
Merci de ton aide

@+
--------------------------------------------------------------------------------
Phantom_2005
Commenter la réponse de phantom_2005
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Dernière intervention
1 septembre 2010
1
0
Merci
Bonjour,

c'est bon, j'ai trouvé!
   
   //Recuperer la valeur dans un char (UNICODE --> ANSI)
   char buf[512]; 
   wcstombs(buf,x.bstrVal,512);

Merci
@+

--------------------------------------------------------------------------------
Phantom_2005
Commenter la réponse de phantom_2005

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.