OVH Cloud OVH Cloud

C++Builder 6 pilotage excel par com

4 réponses
Avatar
Olivier
Bojour j'essais de lire un valeur dans un cellule
j'ai un violation acces "type de variable incorrecte"
quelqu'un peut il l m'aider ?

Code:

// overture exls

Variant vMsExcel;
vMsExcel=Variant::CreateObject("Excel.Application");
vMsExcel.OlePropertySet("Visible",true);

// ouverture en lecture seule
Variant vFileName="Classeur1.xls";
Variant vWorkbooks;
Variant vWorkbook;
Variant vLink=Unassigned;
Variant vReadOnly=true;

vWorkbooks=vMsExcel.OlePropertyGet("Workbooks");
vWorkbook=vWorkbooks.OleFunction("Open",vFileName,vLink,vReadOnly); //
plante ici

// acces feulle de calcul
Variant vWorksheet;
Variant vSheetName="Feuil1";
vWorksheet= vWorkbook.OlePropertyGet("Worksheets",vSheetName) ;


// lecture d'une valeur de celllule
Variant vValue;
Variant vRange="A1";
Variant vCell;

AnsiString s;
vCell=vWorksheet.OlePropertyGet("Range",vRange);
s=vCell.OlePropertyGet("Value");

ShowMessage(s);



merci de votre aide
_________________
Cordialement,
Sarda Olivier
_________________________________
Site Web :
http://www.membres.lycos.fr/osarda/

4 réponses

Avatar
Bidule
Salut,

Je rencontre à peu près le même probleme. Je tente de transférer le contenu
d'une requette vers Excel et ça plante chaque fois que le champ transféré
est de type texte alors que ça ne pose aucun problème pour des valeurs
numériques. Je viens de poster mon problème sous le titre "Probleme entre
Excel & C++ Builder".

Vois tu une raison à cela?


"Olivier" a écrit dans le message de news:
bod9iu$on4$
Bojour j'essais de lire un valeur dans un cellule
j'ai un violation acces "type de variable incorrecte"
quelqu'un peut il l m'aider ?

Code:

// overture exls

Variant vMsExcel;
vMsExcel=Variant::CreateObject("Excel.Application");
vMsExcel.OlePropertySet("Visible",true);

// ouverture en lecture seule
Variant vFileName="Classeur1.xls";
Variant vWorkbooks;
Variant vWorkbook;
Variant vLink=Unassigned;
Variant vReadOnly=true;

vWorkbooks=vMsExcel.OlePropertyGet("Workbooks");
vWorkbook=vWorkbooks.OleFunction("Open",vFileName,vLink,vReadOnly); //
plante ici

// acces feulle de calcul
Variant vWorksheet;
Variant vSheetName="Feuil1";
vWorksheet= vWorkbook.OlePropertyGet("Worksheets",vSheetName) ;


// lecture d'une valeur de celllule
Variant vValue;
Variant vRange="A1";
Variant vCell;

AnsiString s;
vCell=vWorksheet.OlePropertyGet("Range",vRange);
s=vCell.OlePropertyGet("Value");

ShowMessage(s);



merci de votre aide
_________________
Cordialement,
Sarda Olivier
_________________________________
Site Web :
http://www.membres.lycos.fr/osarda/




Avatar
Bidule
Salut c'est encore moi.

Je viens de trouver la solution du problème. En fait, COM ne supporte pas
le type "AnsiString", et apparemment le format texte des Variants est de ce
type. Il faut donc que tu fasses un cast des paramètres variants "texte" en
WideString et là tout roule.

Ex :
vWorkbook=vWorkbooks.OleFunction("Open",WideString(vFileName),vLink,vReadOnl
y);

Bye.

"Bidule" a écrit dans le message de news:
3fc51076$0$6972$
Salut,

Je rencontre à peu près le même probleme. Je tente de transférer le


contenu
d'une requette vers Excel et ça plante chaque fois que le champ transféré
est de type texte alors que ça ne pose aucun problème pour des valeurs
numériques. Je viens de poster mon problème sous le titre "Probleme entre
Excel & C++ Builder".

Vois tu une raison à cela?


"Olivier" a écrit dans le message de news:
bod9iu$on4$
> Bojour j'essais de lire un valeur dans un cellule
> j'ai un violation acces "type de variable incorrecte"
> quelqu'un peut il l m'aider ?
>
> Code:
>
> // overture exls
>
> Variant vMsExcel;
> vMsExcel=Variant::CreateObject("Excel.Application");
> vMsExcel.OlePropertySet("Visible",true);
>
> // ouverture en lecture seule
> Variant vFileName="Classeur1.xls";
> Variant vWorkbooks;
> Variant vWorkbook;
> Variant vLink=Unassigned;
> Variant vReadOnly=true;
>
> vWorkbooks=vMsExcel.OlePropertyGet("Workbooks");
> vWorkbook=vWorkbooks.OleFunction("Open",vFileName,vLink,vReadOnly); //
> plante ici
>
> // acces feulle de calcul
> Variant vWorksheet;
> Variant vSheetName="Feuil1";
> vWorksheet= vWorkbook.OlePropertyGet("Worksheets",vSheetName) ;
>
>
> // lecture d'une valeur de celllule
> Variant vValue;
> Variant vRange="A1";
> Variant vCell;
>
> AnsiString s;
> vCell=vWorksheet.OlePropertyGet("Range",vRange);
> s=vCell.OlePropertyGet("Value");
>
> ShowMessage(s);
>
>
>
> merci de votre aide
> _________________
> Cordialement,
> Sarda Olivier
> _________________________________
> Site Web :
> http://www.membres.lycos.fr/osarda/
>
>




Avatar
Olivier Sarda
tu peux aussi mettre un char *

"Bidule" a écrit dans le message de news:
3fc6459d$0$6972$
Salut c'est encore moi.

Je viens de trouver la solution du problème. En fait, COM ne supporte pas
le type "AnsiString", et apparemment le format texte des Variants est de


ce
type. Il faut donc que tu fasses un cast des paramètres variants "texte"


en
WideString et là tout roule.

Ex :



vWorkbook=vWorkbooks.OleFunction("Open",WideString(vFileName),vLink,vReadOnl
y);

Bye.

"Bidule" a écrit dans le message de news:
3fc51076$0$6972$
> Salut,
>
> Je rencontre à peu près le même probleme. Je tente de transférer le
contenu
> d'une requette vers Excel et ça plante chaque fois que le champ


transféré
> est de type texte alors que ça ne pose aucun problème pour des valeurs
> numériques. Je viens de poster mon problème sous le titre "Probleme


entre
> Excel & C++ Builder".
>
> Vois tu une raison à cela?
>
>
> "Olivier" a écrit dans le message de news:
> bod9iu$on4$
> > Bojour j'essais de lire un valeur dans un cellule
> > j'ai un violation acces "type de variable incorrecte"
> > quelqu'un peut il l m'aider ?
> >
> > Code:
> >
> > // overture exls
> >
> > Variant vMsExcel;
> > vMsExcel=Variant::CreateObject("Excel.Application");
> > vMsExcel.OlePropertySet("Visible",true);
> >
> > // ouverture en lecture seule
> > Variant vFileName="Classeur1.xls";
> > Variant vWorkbooks;
> > Variant vWorkbook;
> > Variant vLink=Unassigned;
> > Variant vReadOnly=true;
> >
> > vWorkbooks=vMsExcel.OlePropertyGet("Workbooks");
> > vWorkbook=vWorkbooks.OleFunction("Open",vFileName,vLink,vReadOnly); //
> > plante ici
> >
> > // acces feulle de calcul
> > Variant vWorksheet;
> > Variant vSheetName="Feuil1";
> > vWorksheet= vWorkbook.OlePropertyGet("Worksheets",vSheetName) ;
> >
> >
> > // lecture d'une valeur de celllule
> > Variant vValue;
> > Variant vRange="A1";
> > Variant vCell;
> >
> > AnsiString s;
> > vCell=vWorksheet.OlePropertyGet("Range",vRange);
> > s=vCell.OlePropertyGet("Value");
> >
> > ShowMessage(s);
> >
> >
> >
> > merci de votre aide
> > _________________
> > Cordialement,
> > Sarda Olivier
> > _________________________________
> > Site Web :
> > http://www.membres.lycos.fr/osarda/
> >
> >
>
>




Avatar
Cyrille \cns\ Szymanski
> tu peux aussi mettre un char *



Prière de répondre à l'endroit, c'est à dire dans le sens de lecture. Et
surtout de ne pas citer plus que nécessaire.

http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html


--
_|_|_| CnS
_|_| for(n=0;b;n++)
_| b&=b-1; /*pp.47 K&R*/