Tester le type d'une valeur???

Résolu
freepouy18
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005
- 15 sept. 2005 à 15:21
phantom_2005
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
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.

9 réponses

BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
15 sept. 2005 à 16:25
VARIANT possède un champ 'vt' qui est l'indicateur de ce qu'englobe le variant.

ciao...
BruNews, MVP VC++
3
freepouy18
Messages postés
49
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
15 septembre 2005

15 sept. 2005 à 16:33
Merci BruNews, en chechant une peu, j'ai trouvé.
0
phantom_2005
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2010
1
22 janv. 2007 à 10:39
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
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
22 janv. 2007 à 10:50
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phantom_2005
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2010
1
22 janv. 2007 à 10:56
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
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
22 janv. 2007 à 11:12
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++
0
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
22 janv. 2007 à 11:14
ou en plus long:

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

ou truc de ce genre.

ciao...
BruNews, MVP VC++
0
phantom_2005
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2010
1
22 janv. 2007 à 11:24
J'ai toujours que le premier caractere de ma chaine
Merci de ton aide

@+
--------------------------------------------------------------------------------
Phantom_2005
0
phantom_2005
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2010
1
23 janv. 2007 à 11:04
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
0