Problème avec Excel (ole)

Signaler
Messages postés
14
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
15 juillet 2008
-
Messages postés
1
Date d'inscription
mercredi 9 juillet 2008
Statut
Membre
Dernière intervention
14 octobre 2009
-
J'ai toujours mon probleme lorsque je veux acceder a excel via Delphi.
J'ai bien ajouter les uses : comobj, variants et même excel 97 ou Excel 2000
Mon code pour acceder a Excel est le suivant :
1)var
2) v_ex : variant;
3)begin
4) v_ex := createOleObject('Excel.Application');
5) v_ex.workbooks.open('c:\test\test.xls');
6) ...
7)end;

Avant ce code fonctionnait très bien dans mon application mais depuis un certain temps j'ai un message d'erreur à l'exécution de la ligne 4).
Voici le message "Le projet prj_toto.exe a provoque une classe d'exception EOleSysError avec le message 'CoInitialize n'a pas ete appele'. Processus stoppé. Utilisez Pas-a-pas ou Executer pour continuer".

Suite a ce message d'erreur, bete et dissipline j'ai rajouter la fonction CoInitialize mais rien y fait. Je suis oblige de creer dans un projet annexe cette fonction pour me permettre d'accéder à Excel, or je veux conserver tous mes traitements dans le même projet pour faciliter la maintenance de celui-ci.

J'attend vos suggestions car la je commence vraiment à desesperer.

Merci d'avance.

FeuilleMorte

10 réponses

Messages postés
84
Date d'inscription
mercredi 25 septembre 2002
Statut
Membre
Dernière intervention
21 mai 2004

Bonjour,
As-tu testé sur un autre PC ?
Cela vient peut-être de ton excel.

Sinon, je ne voie pas pourquoi ton code plante...

RMD

www.Logiciels-RMD.com
Messages postés
14
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
15 juillet 2008

Tout d'abord merci d'avoir répondu aussi rapidement.

Mon programme reagi de la meme maniere sur les autres postes et meme avec d'autre version d'Excel. Cependant si je prend mon code et que je l'insert dans un nouveau projet cela fonctionne!!! Je peux toujours opter pour cette solution. Cependant j'aimerai concerver un seul et meme projet pour tous mes modules, mais apparament ca va pas etre possible...

En esperant avoir la solution miracle prochainement,

je vous salut

FeuilleMorte
Messages postés
84
Date d'inscription
mercredi 25 septembre 2002
Statut
Membre
Dernière intervention
21 mai 2004

Utilises-tu un variant avant cet appel ?
Peut-être as-tu oublié un Quit avant de redemander un CreateOleObject ?

RMD

www.Logiciels-RMD.com
Messages postés
507
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1
Va voir sur http://www.developpez.com
Tu as 2 tutos sur l'accés à Word et Excel par OLE vraiments tops.

<-- St@iLeR -->
Messages postés
14
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
15 juillet 2008

non RDM je n'utilise pas de variant avant le code présent dans mon premier message, et si je fait un variant.quit j'ai également un message d'erreur (normal je pense vu que je n'ai pas reussi a le lancer).

Même avec GetActiveOleObject('Excel.Application'); j'ai le message d'erreur par rapport a CoInitialize.

St@iLeR j'avais deja regarde sur developper.com ou il y a une autre methode pour appeler excel mais elle a ete sans succes (je ne l'ai pas retrouvee sur le site aujourd'hui). Ce que je ne comprend pas c'est qu'avant mon code fonctionnait tres bien mais depuis certaines modifications (qui n'ont rien d'exceptionnel) cette fiche plante. Sur ma fiche j'ai uniquement 2 TDatetimPicker et 2 boutons. Je ne fait aucun traitement avant mon appel au variant (a part l'initialisation de mes dates)

Mon problème est survenu lorsque j'étais encore sous Delphi 5 et le passage a Delphi 6 n'a rien changé (je ne pense pas passer à Delphi 7 pour l'instant).

Je croise quand meme encore les doigts, on ne sait jamais.

FeuilleMorte
Messages postés
507
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
13 mai 2009
1
T'es sur que t'as bien fait ca pour ouvrir ta feuille Excel :

var
vXLWorkbooks, vXLWorkbook, vMsExcel : variant ;
afilename : string;
begin
vMSExcel := CreateOleObject('Excel.Application');
aFileName := ExtraCtFilePatH(Application.ExeName + 'factures\facture_modèle.xls';

//Tu peux faire aussi : afilename := 'C:\mafeuille.xls';

vXLWorkbooks := vMSExcel.Workbooks;
vXLWorkbook := vXLWorkbooks.Open(aFileName);
end;

<-- St@iLeR -->
Messages postés
14
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
15 juillet 2008

oui ,
mais comme j'ai un message d'erreur a la premiere ligne :
vMSExcel := CreateOleObject('Excel.Application');
je ne peux pas aller plus loin
J'ai peut etre du a un moment changer quelque chose dans mon projet qui altere ce fonctionnement ...


FeuilleMorte
Messages postés
35
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
21 septembre 2005

Essaye ceci :
- ajouter 'ActiveX' à la clause 'Uses'
-rajouter les lignes suivantes à la fin de ta fiche :

Initialization
CoInitialize(nil);

Finalization
CoUninitialize;
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
Tu as du trouver une solution , mais sinon, j'ai eu le même souci .
Dans les options du debogger : j'avais coché "Activer support inter processus COM".

Cela planté l'ouverture d'excel dans le debogger.
Messages postés
1
Date d'inscription
mercredi 9 juillet 2008
Statut
Membre
Dernière intervention
14 octobre 2009

Bonjour Dominique,

J'ai rencontré le même problème et je me suis effectivement rappelé avec touché au fonction du débogger.
Après correction de l'item "Activer ...COM", l'application OleExcel Fonctionne parfaitement.

Je te remercie.

Cordialement,

Guénael