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 :

ouverture classeur excel plusieurs fois


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Avril 2011
    Messages : 177
    Points : 111
    Points
    111
    Par défaut ouverture classeur excel plusieurs fois
    Bonjour,
    J’ai un programme delphi 7 qui modifié un classeur Excel et il met des valeurs dans les feuilles, l’interface ce compose d’une forme et un bouton, ce dernier lance le classeur Excel et remplir les valeurs sur les feuilles.
    Mon problème est qu’a chaque clique sur le bouton le même classeur s’ouvre plusieurs fois, comment régler ce problème.
    Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 659
    Points : 25 440
    Points
    25 440
    Par défaut
    Conserve le Variant et l'objet Excel comme membre privé d'un objet (comme le TForm), puis réutilise le, tu dois probablement appeler CreateOleObject à chaque fois !
    Tu aurais d'ailleurs pu fournir le code !

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Avril 2011
    Messages : 177
    Points : 111
    Points
    111
    Par défaut
    Bonjour et Merci .
    Alors j'ai pas bien compris comment je peux conservé l'objet Excel
    et voici 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    procedure TForm1.dClick(Sender: TObject);
    var
    vXLWorkbook, vXLWorkbooks,vMSExcel, vCell, vWorksheet : variant;
          NomFichier, aRange, aSheetName : AnsiString;
          i:integer;
    max:real;
    begin
     
    i:=2;
    vMSExcel := CreateOleObject('Excel.Application');
        vMSExcel.Visible := true;
        NomFichier := 'C:\Traitement de la pointe\'+DD.Text+'.xlsx';
        vXLWorkbooks := vMSExcel.Workbooks;
        vXLWorkbook := vXLWorkbooks.Open(NomFichier);
        aSheetName := poste.Text;
        vWorksheet := vXLWorkbook.WorkSheets[aSheetName];
     
     
    with QueryDepart do
    begin
    Close;
    SQL.Clear;
    SQL.Add('select DISTINCT * from DEPART_S.DBF where POSTE_OS='''+Poste.text+''' ');
    Prepare;
    open;
    end;
     
    QueryDepart.Open;
    QueryDepart.First;
    //DBEditPoste.DataField:='depart';
    with QueryDepart do
    begin
    while not Eof do
    begin
     
    DBEditNormal.DataField:='';
    DBEditSecours.DataField:='';
    //identifier la source et le départ  secours
    with QueryLabels do
    begin
     
    Close;
    SQL.Clear;
    SQL.Add('SELECT *from depart_s.dbf where depart='''+DBEditDep.Text+''' AND poste_os ='''+Poste.Text+'''');
    Prepare;
    open;
    end;
    //calcule le courant en état secours
    with QuerySomme do
    begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT DISTINCT D.DATE_M, D.HEURE_M, D.'+DBEditDep.Text+', D1.'+DBEditDepSec_1.Text+',( D.'+DBEditDep.Text+'+ D1.'+DBEditDepSec_1.Text+' ) as Tot FROM "'+Poste.Text+'.DBF" D, "'+DBEditSouSec_1.Text+'.DBF" D1 WHERE (D1.DATE_M = D.DATE_M)  AND (D1.HEURE_M = D.HEURE_M)');
    Prepare;
    open;
    end;
    //création de la table secours
    BatchMove1.execute;
     
     
    with QuerySecours do
    begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT DISTINCT DATE_M, HEURE_M, '+DBEditDep.Text+', '+DBEditDepSec_1.Text+'');
    SQL.Add('from TOT.DBF where Tot=(SELECT DISTINCT max(D.'+DBEditDep.Text+'+ D1.'+DBEditDepSec_1.Text+')');
    SQL.Add('FROM "'+Poste.Text+'.DBF" D, "'+DBEditSouSec_1.Text+'.DBF" D1');
    SQL.Add('WHERE (D1.DATE_M = D.DATE_M)  AND (D1.HEURE_M = D.HEURE_M))');
    Prepare;
    open;
    end;
    DBEditNormal.DataField:=DBEditDep.Text;
    DBEditSecours.DataField:=DBEditDepSec_1.Text;
    Secours.Text:=DBEditSecours.Text;
    Normal.Text:=DBEditNormal.Text;
    //max:=strtofloat(DBEditNormal.Text)+strtofloat(DBEditSecours.Text);
     
    aRange := 'A'+inttostr(i);
    edit2.text:=aRange;
    vCell := vWorksheet.Range[aRange];
    vCell.Value:= Poste.text;
     
    aRange := 'B'+inttostr(i);
    vCell := vWorksheet.Range[aRange];
    vCell.Value:= DBEditDep.text;
     
    aRange := 'C'+inttostr(i);
    vCell := vWorksheet.Range[aRange];
    vCell.Value:=DBEditNormal.text;
     
    aRange := 'D'+inttostr(i);
    vCell := vWorksheet.Range[aRange];
    vCell.Value:=DBEditSouSec_1.text;
     
    aRange := 'E'+inttostr(i);
    vCell := vWorksheet.Range[aRange];
    vCell.Value:=DBEditDepSec_1.text;
     
    aRange := 'F'+inttostr(i);
    vCell := vWorksheet.Range[aRange];
    vCell.Value:=DBEditsECOURS.text;
     
    aRange := 'H'+inttostr(i);
    vCell := vWorksheet.Range[aRange];
    vCell.Value:= strtodate(DBEditDate.text);
     
    aRange := 'I'+inttostr(i);
    vCell := vWorksheet.Range[aRange];
    vCell.Value:=DBEdithEURE.text;
     
     
      vWorksheet := vXLWorkbook.WorkSheets[aSheetName].Activate;
    end;
    Citation Envoyé par ShaiLeTroll Voir le message
    Conserve le Variant et l'objet Excel comme membre privé d'un objet (comme le TForm), puis réutilise le, tu dois probablement appeler CreateOleObject à chaque fois !
    Tu aurais d'ailleurs pu fournir le code !

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 659
    Points : 25 440
    Points
    25 440
    Par défaut
    Faut donc reprendre les bases : Guide Pascal et Delphi - XII-C-2-b. Ajout de méthodes et de variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    type
      TForm1 = class(TForm)
        d: TButton;
        DD: TEdit;
        ...
      private
        vMSExcel: variant;
      ...
    En testant via VarIsEmpty, tu pourras savoir si tu dois faire CreateOleObject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.dClick(Sender: TObject);
    begin
      if VarIsEmpty(vMSExcel) then
        vMSExcel := CreateOleObject('Excel.Application');
    ...

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Avril 2011
    Messages : 177
    Points : 111
    Points
    111
    Par défaut
    Bonjour;
    Merci ShaiLeTroll; c'est exactement la solution.
    j'ai fait le test (si le fichier est ouvert alors un message s'affiche comme ('fermer le fichier SVP puis exécuter votre action');

    je cherche maintenant comment je dit a mon programme si le fichier est ouvert alors il faut affiché les résultat sur ce fichier ouvert;
    c'est pas dans le chemin initial :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFichier := 'C:\Traitement de la pointe\'+DD.Text+'.xlsx';
    comment peut en faire ça !!
    Merci.


    Citation Envoyé par ShaiLeTroll Voir le message
    Faut donc reprendre les bases : Guide Pascal et Delphi - XII-C-2-b. Ajout de méthodes et de variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    type
      TForm1 = class(TForm)
        d: TButton;
        DD: TEdit;
        ...
      private
        vMSExcel: variant;
      ...
    En testant via VarIsEmpty, tu pourras savoir si tu dois faire CreateOleObject

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.dClick(Sender: TObject);
    begin
      if VarIsEmpty(vMSExcel) then
        vMSExcel := CreateOleObject('Excel.Application');
    ...

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/04/2009, 21h57
  2. Ouverture classeur excell
    Par lejujudu59 dans le forum Visual C++
    Réponses: 2
    Dernier message: 04/09/2007, 12h18
  3. [VBA-E]Fermer classeur EXCEL parmi plusieurs
    Par flyfrog dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/04/2006, 11h54
  4. Ouverture classeur excel en VBSCRIPT
    Par coeur74 dans le forum ASP
    Réponses: 6
    Dernier message: 20/01/2005, 15h53
  5. Ouverture classeur excel en VBSCRIPT
    Par coeur74 dans le forum ASP
    Réponses: 2
    Dernier message: 20/01/2005, 09h11

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