IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

petit probleme avec automation Excel


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut petit probleme avec automation Excel
    salut

    je vous explique le probleme je crée une feuille excel via l'automation d'Excel comme indiqué dans la Faq (mais pas le composant de delphi)
    et mon soucis est le suivant lorsque mon programme tourne j'ouvre l'instance a excel ensuite je la ferme et je laisse tourner mon programme je vais ouvrir le fichier que j'ai crée par excel sa fonctionne bien mais si je recommence excel plante d'une certaine facon car il n'afficher que la barre d'outils et rien d'autre même pas une feuille blanche, (cependant si je travail sur mon programme les modif sur mon fichier sont effectué malgré tout) donc je referme excel et si j'arrete mon soft excel refocntionne normalement et la je peut voir les modif etc...

    je vous transmet les codes d'instance et de save et de close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    if ConfigTest_Parametres.CptRenduExcel then
      begin
        vMSExcel := CreateOleObject('Excel.Application');
     
        try
          vMSExcel := GetActiveOleObject('Excel.Application');
        except
          vMSExcel := CreateOleObject('Excel.Application');
        end;
     
        vXLWorkBooks := vMSExcel.WorkBooks;
        vXLWorkBook := vXLWorkBooks.Add;
     
        vXLWorkSheet := vXLWorkBook.WorkSheets['Feuil1'];
        vXLCell := vXLWorkSheet.Range['A1'];
        vXLCell.Value := Traduction_Traduire(9160);
        vXLCell := vXLWorkSheet.Range['B1'];
        vXLCell.Value := Traduction_Traduire(9161);
        vXLCell := vXLWorkSheet.Range['C1'];
        vXLCell.Value := Traduction_Traduire(9162);
        vXLCell := vXLWorkSheet.Range['D1'];
        vXLCell.Value := Traduction_Traduire(9163);
        vXLCell := vXLWorkSheet.Range['E1'];
        vXLCell.Value := Traduction_Traduire(9164);
        vXLCell := vXLWorkSheet.Range['F1'];
        vXLCell.Value := Traduction_Traduire(9165);
     
        NumLigneExcel := 2;
      end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ConfigTest_Parametres.CptRenduExcel then
      begin
        vXLWorkBook.SaveAs(ChangeFileExt(NomFichier,'.xls'));
        vXLWorkBook.Close(False,ChangeFileExt(NomFichier,'.xls'));
      end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if ConfigTest_Parametres.CptRenduExcel then
          begin
            vXLCell := vXLWorkSheet.Range['B'+IntToStr(NumLigneExcel)];
            vXLCell.Value := StBon;
            vXLCell := vXLWorkSheet.Range['C'+IntToStr(NumLigneExcel)];
            LireNomPointUtilisateur(Pt1,Nom);
            vXLCell.Value := Nom;
            vXLCell := vXLWorkSheet.Range['D'+IntToStr(NumLigneExcel)];
            LireNomPointUtilisateur(Pt2,Nom);
            vXLCell.Value := Nom;
            vXLCell := vXLWorkSheet.Range['E'+IntToStr(NumLigneExcel)];
            vXLCell.Value := Res;
            vXLCell := vXLWorkSheet.Range['F'+IntToStr(NumLigneExcel)];
            vXLCell.Value := 'B';
     
            Inc(NumLigneExcel);
          end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vMSExcel, vXLWorkBooks, vXLWorkBook, vXLWorkSheet, vXLCell : variant;
    ps: lorsque jouvre excel la fonction close est deja effectué mais mon soft est toujours present il tourne en gros mai n'utilise plus excel
    lorsque je veu reutiliser je repass par la fonction qui instancie

    merci pour le code main car je sais vraiment pas quoi faire aucune idée
    [/code]

  2. #2
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    Salut,
    je crois qu'il faut liberer les resources apres avoir terminer ton Progi.
    Exemple:
    Try
    Demarer excel instance(ObjExcel)
    Do somethings (ObjExcel)
    finally
    ObjExcel.close ou disconnect
    FreeAndNil(ObjExcel);
    end ;
    paceque si linstance est encore en memoire, excel plante.
    Apprends la science de celui qui sait, et enseigne ta science à celui qui ignore, comme ca, tu auras appris ce que tu ignores et utilisé ce que tu sais.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut
    ca marchera qd mm apres si apres le close je fai le freeandnil de l'objet juste en relancant la premier partie de mon code ??

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut
    g rajouter cette ligne apres linstruction close

    ca me crée une violation memoire

  5. #5
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    croi quil faut faire un truc comme:
    dans ton finally:
    vMSExcel.Quit;
    vMSExcel := unassigned;

    regarde ici: http://lfe.developpez.com/PasExcel/
    Apprends la science de celui qui sait, et enseigne ta science à celui qui ignore, comme ca, tu auras appris ce que tu ignores et utilisé ce que tu sais.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut
    j'ai pa de finally car la fermeture je la fai plus loin dans mon prog c pour ca que j'ai différencier les code dans le message

    sinon je vai regarder

    merci

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 282
    Points : 102
    Points
    102
    Par défaut
    c bon ca marche merci cependant le probleme etai pas juste le vXL := unsagned mais tout les autres osi le workbooks etc...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec un Excel Automation
    Par Bluberiman dans le forum C#
    Réponses: 0
    Dernier message: 24/11/2010, 13h57
  2. [C#] Petit problème avec un élément du FAQ
    Par matech dans le forum ASP.NET
    Réponses: 11
    Dernier message: 24/01/2008, 14h11
  3. petit probleme avec Devil
    Par ellipse dans le forum DevIL
    Réponses: 2
    Dernier message: 01/02/2005, 18h41
  4. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  5. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo