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

 Delphi Discussion :

[D7] Export d'un StringGrid vers Excel


Sujet :

Delphi

  1. #21
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    EOleException avec : La table traduction existe déjà
    Normal : Il faut voir ton classeur Excel comme une base de données où chaque feuille est une table.
    Si tu tentes de créer une table qui existe déjà, tu as une erreur.

    Pour remplir une cellule, il faut remplir une ligne par la requête telle que je l'ai montrée dans l'exemple à 10h32.

    Chaque fois que tu fais un appendrecord , tu ajoutes une ligne comme dans une table mysql, sqlite ou autre ....
    Si tu veux remplir qu'une seule cellule, tu mets des chaînes vides dans les éléments du tableau que tu passe en paramètre.

    ADOQuery.AppendRecord(['colonne 1', '', '', 'colonne 4', '']);

  2. #22
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    Merci BuzzLeclaire,

    ton code est intéressant et très complet, mais j'arrive bien à créer un fichier Excel comme je le souhaite avec Ole et le simple code que j'ai donné plus haut.

    J'essaye de faire sans que Excel soit installé sur le poste

    A+
    Charly

  3. #23
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    ça fonctionne bien !
    Voici le code complet qui créé un fichier XLS, et rempli 3 lignes :

    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    unit Unit1;
     
    { Export des données vers Excel avec ADOX }
    {
      1)Project->Import Type Library:
      2)Select "Microsoft ADO Ext. for DDL and Security"
      3)Uncheck "Generate component wrapper" at the bottom
      4)Rename the class names (TTable, TColumn, TIndex, TKey, TGroup, TUser, TCatalog) in
        (_Table, _Column, _Index, _Key, _Group, _User, _Catalog)
        in order to avoid conflicts with the already present TTable component.
      5)Select the Unit dir name and press "Create Unit".
        It will be created a file named AOX_TLB.
        Include ADOX_TLB in the "uses" directive inside the file in which you want
        to use ADOX functionality.
     
      That is all. Let's go now with the implementation:
    }
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ADOX_TLB, StdCtrls, Grids, DB, ADODB ;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        StringGrid1: TStringGrid;
        procedure Button1Click(Sender: TObject);
        Procedure XLS1 ;
        Procedure Remplir ;
      Private  
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      cat: _Catalog;
      tbl: _Table;
      col: _Column;
     
    implementation
     
    {$R *.dfm}
     
     
    Procedure TForm1.XLS1 ;
    begin
      If FileExists('d:\creerexcel.xls') Then DeleteFile('d:\creerexcel.xls') ;
      cat := CoCatalog.Create;
      cat.Set_ActiveConnection(
        'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\creerexcel.xls;Extended Properties=Excel 8.0');
     
        // WorkSheet creation (table)
        tbl := CoTable.Create;
        tbl.Set_Name('Traductions');
     
        col := CoColumn.Create;
        with col do
        begin
          Set_Name('Groupe');
          Set_Type_(adWChar);
        end;
        tbl.Columns.Append(col, adWChar, 500);
     
        col := CoColumn.Create;
        with col do
        begin
          Set_Name('Emplacement');
          Set_Type_(adWChar);
        end;
        tbl.Columns.Append(col, adWChar, 150);
     
        col := CoColumn.Create;
        with col do
        begin
          Set_Name('ID');
          Set_Type_(adInteger);
        end;
        tbl.Columns.Append(col, adInteger, 11);
     
        col := CoColumn.Create;
        with col do
        begin
          Set_Name('Référence');
          Set_Type_(adWChar);
        end;
        tbl.Columns.Append(col, adWChar, 500);
     
        cat.Tables.Append(tbl);
     
        col := nil;
        tbl := nil;
        cat := nil;
    end;
     
    Procedure TForm1.Remplir ;
    Var
      Groupe, Emplacement, ID, Reference : String ;
      ADOConnection : TADOConnection ;
      ADOQuery : TADOQuery ;
    Begin
      Groupe := 'AA' ;
      Emplacement := 'BB' ;
      ID := '2' ;
      Reference := 'RefXX' ;
      ADOConnection                  := TADOConnection.Create(nil);
      ADOConnection.LoginPrompt      := false;
      ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\creerexcel.xls;Extended Properties=Excel 8.0';
      ADOQuery                       := TADOQuery.Create(nil);
      ADOQuery.Connection            := ADOConnection;
     
      // La feuille s'appelle Traduction et il faut lui ajouter un $
      ADOQuery.SQL.Text := 'Select * from [' + 'Traductions' + '$]'  ;
      ADOQuery.Open;
     
      // Groupe, Emplacement, ID, Reference, Trad sont des variables à remplir
      ADOQuery.AppendRecord([Groupe, Emplacement, ID, Reference]);
     
      ADOQuery.Close;
     
      ADOConnection.Close;
    End ;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      XLS1 ;
      Remplir ;
      Remplir ;
    end;
     
    end.
    Merci beaucoup Papy214

    A+
    Charly

  4. #24
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 102
    Points : 87
    Points
    87
    Par défaut
    Bonjour
    perso j'utilise ce composant : http://www.kluug.net/xlsx-ods-delphi.php dans mes application pro.

    Pas besoin d'OLE, ou d'excel installé sur le poste.
    Super puissant, SAV ok, et génère aussi ODT, XLSX...
    Bon rapport qualité / prix selon moi

    cordialement, Pascal

  5. #25
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    Merci Pascal,

    mais je suis un amateur, et j'utilise des solutions gratuites. Je pense que ton composant est payant, même s'il y a une version trial gratuite.

    Je vais tester la version Trial.

    La solution de Papy me va bien. Dans mon appli, j'ai implémenté 2 solutions :
    - soit Excel est détecté sur la poste et je passe par OLE,
    - soit Excel n'est pas trouvé et je passe par la solution de Papy.

    (histoire d'avoir les 2 !)

    A+
    Charly

  6. #26
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Charly910 Voir le message
    mais je suis un amateur, et j'utilise des solutions gratuites. Je pense que ton composant est payant, même s'il y a une version trial gratuite.
    Je vais tester la version Trial.
    En ce cas regarde aussi du côté de TMS Software Grid Pack qui permet aussi de faire de l'export vers des feuilles Excel
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Export Multi StringGrid vers Excel
    Par BuzzLeclaire dans le forum Contribuez
    Réponses: 2
    Dernier message: 20/01/2009, 14h09
  2. Réponses: 7
    Dernier message: 22/12/2005, 09h56
  3. Comment exporter un lien hypertexte vers excel
    Par Celia1303 dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 09h33
  4. Exporter un état QuickReport vers Excel.
    Par abdelghani_k dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/06/2004, 14h22
  5. [] [Excel] Exporter un graphe MSChart vers Excel
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 17h49

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