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

Langage Delphi Discussion :

processus excel [FAQ]


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut processus excel
    Bonjour

    Voila, mon appli remplit des cellules dans un classeur excel. J'utilise Delphi 4 STD.
    extrait de mon code
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    procedure TFormCreatEnvoiFi.Button1Click(Sender: TObject);
    var
    	aMSG:String;
      FichIni:TIniFile;
      x:Integer;
      ListDest:TStrings;
      aRange:AnsiString;
    begin
    // Ouvrir Classeur ModèleFi.xls
    	FichIni := TIniFile.Create('c:\fi\FINI.ini');
     	ASheetName:=FichIni.ReadString('Parametres', 'CHEMIN','');
      Fichini.free;
      aFileName:=aSheetName+'\modeleFi.XLS';
      try
      	vMSExcel:=GetActiveOleObject('Excel.Application');
      except
        vMSExcel:=CreateOleObject('Excel.Application');
      end;
      vXLWorkbooks:=vMSExcel.workBooks;
      vXLWorkBook:=vXLWorkBooks.open(aFilename);
      //
      FichIni := TIniFile.Create('c:\fi\FINI.ini');
      ListDest:=TStringList.Create;
      FichIni.ReadSectionValues('MonMail',ListDest);
      //  remplir cellule ds EXCEL avec Destinataire
      vWorksheet:=vXLWorkBook.WorkSheets['FeuilleFi'];
      for x:=0 to ListDest.Count-1 do
      	begin
        	aRange:='K'+IntToStr(x+1);
      		vCell:=vWorksheet.range[aRange];
          vCell.value:=Copy(ListDest[x],3,Length(ListDest[x])-1);
        end;
      FichIni.Free;
      ListDest.free;
      vXLWorkBook.save;
      TraiterFi;  // procedure pour remplir un certain nombre de cellule
      //
      aFileName:='\FI '+DateTimeToStr(now);
      aFileName:=ReplaceStr(aFilename,':','_');
      aFileName:=ReplaceStr(aFilename,'/','_');
      aFileName:=aFileName+'.xls';
      AfileName:=aSheetName+AfileName;
      vXLWorkBook.saveAs(aFileName);
      vXLWorkBook.Close(false,AfileName);
     
      vXLWorkBook:=unassigned;
      vWorksheet:=unassigned;
      vMSExcel.Quit;
      vMSEXCEL:=unassigned;
      //
    end;
    les variables pour excel sont déclarées avant la section implémentation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      FormCreatEnvoiFi: TFormCreatEnvoiFi;
       vMSExcel,vXLWorkBooks,vXLWorkBook,vCell,vWorkSheet:variant;
     
    implementation
     
    uses UnitDM, UnitRapport;
     
    {$R *.DFM}
    Mon application fonctionne parfaitement, seulement tant que je ne l'ai pas fermée, lorque j'essais d'ouvrir un fichier EXCEL par l'explorateur ( n'importe leque), EXCEL se lance, en affichant le nom du classeur ouvert dans la barre d'info d'en haut, mais n'affiche pas de feuille de calcul.

    Je lance le gestionnaire de tache de windows, dans la partie processus j'arrête le processus EXCEL, j'essais de réouvrir un fichier excel par l'exploreur windows, et là, tout fonctionne.

    Idem si je quitte mon appli, si j'ouvre un fichier EXCEL par EXCEL ou si j'ouvre un fichier EXCEL par l'explorateur (EXCEL étant deja lancée).

    Donc tant que je n'ai pas fermée mon appli, j'ai toujours un processus EXCEL en cours.
    Est ce que quelqu'un a déjà rencontré ce problème ?
    Comment faire pour terminer ce processus ?

    merci
    a+

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut

    Re

    J'ai trouvé la solution à mon problème !!!

    J'ai simplement supprimer la ligne
    vMSEXCEL.Quit;

    De là à me l'expliquer !!! Si quelqu'un à la réponse merci d'avance.

    je laisse le sujet en non résolu pour le moment


    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut
    Bonjour,
    Je me permet de relancer ce sujet parce que j'ai exactement le meme problème que CharleLéo (j'espère que tu ne m'en veux pas trop d'utiliser ton sujet?).

    donc comme toi j'ai un processus Excel qui tourne jusqu'à ce que je ferme mon appli, mais malheureusement ta solution ne marche pas chez moi... ca aurait été trop simple).

    Mais c'est peut etre normal étant donné que moi j'utilise le composant TExcelApplication.
    Voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           XlClasseur.close(False,0,0,0); 
                   MessageBeep(MB_OK);
                finally
                   ExcelApplication1.Quit;
                   ExcelApplication1.Disconnect;
                   ExcelApplication1.Free;
                End;
    Et malgrès ca j'ai toujours un processus Excel, ce qui est assez génant.

    Donc si quelqu'un a une idée, elle est sera acceuillée à bras ouvert

    Vince

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Par défaut
    Salut,

    J'ai trouvé dans un message concernant ce pb, qu'il faut mettre à :=unassigned tous les variant utilisés pour l'objet excel. Aprés mis en en application, tout fonctionne normalement.

    Merci à tous

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut
    Merci pour ta réponse mais dans mon cas je n'ai pas de variant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
               XlClasseur : _workbook;
               XlFeuille :_Worksheet;
               ExcelApplication1 : TExcelApplication;
    ...
    J'ai comme meme essayé et il me sort une erreur du genre
    type incompatible : variant et _workbook
    Si quelqu'un a une idée ca serait cool parce que sinon je pense que je vais opter pour la méthode tout en finesse : lister les processus en cours et tuer EXCEL.....

    Merci d'avance

    Vince

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

Discussions similaires

  1. Application Excel - Tuer le processus EXCEL.EXE?
    Par xVINCEx dans le forum VB.NET
    Réponses: 21
    Dernier message: 18/04/2012, 10h43
  2. VB6: tuer le processus Excel
    Par Svart26 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/07/2006, 08h02
  3. [VB6] Terminer Processus Excel
    Par aurelien2723 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 05/05/2006, 15h38
  4. [VBA-A]pb ouvrir processus excel
    Par JulienCEA dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/02/2006, 10h50

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