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

Bases de données Delphi Discussion :

Exporter des données à Ms_Excel2007


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Enseignant
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Par défaut Exporter des données à Ms_Excel2007
    Bonjour;
    Comment faire exporter les données d'un table ou d'un query depuis Delphi2007 vers MS_Excel 2007 .

    J'ai essai plusieurs méthodes, mais je n'ai pas réussi.
    Quel est la solution? SVP.

  2. #2
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    un problèmes bien soumis est a moitié résolu.

    c'est données proviennent certainement d'une base de donnée, elle est de quel type.

  3. #3
    Membre éclairé Avatar de Dirk-Pitt
    Inscrit en
    Juillet 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Juillet 2007
    Messages : 71
    Par défaut
    Bonjour,

    J'ai écrit un petit bout de code. Je ne sais pas si cela correspond à ce que tu souhaites, mais cela peut de donner une piste. Attention tout de même, il n'est certainement pas 100% finalisé, il correspond juste à mon besoin.

    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
    procedure DataSetToExcel( iDataSet: TDataSet; const iFileName: string; iBreak: integer = -1 );
    const
        cMax = 65535;
        xlWBATWorksheet = -4167;
    var
        lExcelApp, lSheet: OleVariant;
        lRowDB, lPage, lRow, lCol: integer;
        lPrevValue: string;
    begin
        DeleteFile( iFileName );
     
        lExcelApp := CreateOleObject( 'Excel.Application' );
        try
            lExcelApp.Visible := false;
            lExcelApp.Workbooks.Add( xlWBATWorksheet );
     
            try
                with iDataSet do begin
                    lRowDB := -1;
     
                    while not Eof do begin
                        Inc( lRowDB );
     
                        if lRowDB mod cMax = 0 then begin
                            lPage := 1 + lRowDB div cMax;
                            if lPage <> 1 then lExcelApp.Worksheets.Add( , lExcelApp.Workbooks[ 1 ].WorkSheets[ -1 + lPage ] );
                            lSheet := lExcelApp.Workbooks[ 1 ].WorkSheets[ lPage ];
                            lSheet.Activate;
     
                            {* Header *}
                            lRow := 1;
                            lPrevValue := '************';
                            for lCol := 0 to Pred( FieldCount ) do begin
                                lSheet.Cells[ lRow, 1 + lCol ] := Fields[ lCol ].FieldName;
                            end;
                        end;
     
                        if iBreak <> -1 then begin
                            {* Break Handling *}
                            if not SameText( lPrevValue, Fields[ iBreak ].AsString ) then begin
                                if not SameText( lPrevValue, '************' ) then begin
                                    lPrevValue := Fields[ iBreak ].AsString;
                                    Inc( lRow );
                                    Continue;
                                end
                                else begin
                                    lPrevValue := Fields[ iBreak ].AsString;
                                end;
                            end;
                        end;
     
                        {* Value *}
                        Inc( lRow );
                        for lCol := 0 to Pred( FieldCount ) do begin
                            if not Fields[ lCol ].IsNull then begin
                                try
                                    case Fields[ lCol ].DataType of
                                        ftInteger: lSheet.Cells[ lRow, 1 + lCol ].Value := Fields[ lCol ].AsInteger;
                                        ftFloat: lSheet.Cells[ lRow, 1 + lCol ].Value := Fields[ lCol ].AsFloat;
                                        ftDateTime: lSheet.Cells[ lRow, 1 + lCol ].Value := Fields[ lCol ].AsDateTime;
                                        // ftDateTime: lSheet.Cells[ lRow, 1 + lCol ].Formula := DateToDateEx( Fields[ lCol ].AsDateTime );
                                        ftString: lSheet.Cells[ lRow, 1 + lCol ].Value := Fields[ lCol ].AsString;
                                    else
                                        lSheet.Cells[ lRow, 1 + lCol ].Value := GetEnumName( TypeInfo( TFieldType ), Ord( Fields[ lCol ].DataType ) );
                                    end;
                                except
                                    on E: EOleException do begin
                                        lSheet.Cells[ lRow, 1 + lCol ].Value := 'EOleException';
                                    end;
                                end;
                            end;
                            if iBreak <> -1 then lSheet.Cells[ lRow, 1 + lCol ].Interior.ColorIndex := 35;
                        end;
     
                        Next;
                    end;
                end;
            finally
                lExcelApp.Workbooks[ 1 ].SaveAs( iFileName );
            end;
        finally
            if not VarIsEmpty( lExcelApp ) then begin
                lExcelApp.DisplayAlerts := false;
                lExcelApp.Quit;
                lExcelApp := Unassigned;
            end;
        end;
    end;

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par Harouache
    Bonjour;
    Comment faire exporter les données d'un table ou d'un query depuis Delphi2007 vers MS_Excel 2007 .

    J'ai essai plusieurs méthodes, mais je n'ai pas réussi.
    Quel est la solution? SVP.
    - Soit tu passes par des composants tiers (voir dans la JVCL, TJvDbGridExcelExport)

    - Soit tu le fais à la main en utilisant le fichier texte au format structuré (souvent on parle de fichier CSV), il y a plusieurs exemple dans le forum, fait une recherche avec le mot clef CSV tu trouveras ton bonheur

    - Soit tu peux passer par les RecordSet d'ADO (si bien sur tu utilises ces composants ^^) pour générer un fichier CSV.
    Il faut rajouter dans les uses de l'unité : ADOint

    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
     
    procedure RecordSetToCsv (ARecordSet : _RecordSet;ColDelemiter,RowDelemiter,Filename : String);
    var
      lst : TStringList;
      i : integer;
      sTemp : String;
    begin
      With ARecordSet do
      begin
        lst := TStringList.Create;
        try
          MoveFirst; // obligatoire sinon la récupération des données ne se fera qu'a la position courante du curseur dans la base de données.
          lst.Text := GetString(adClipString,RecordCount,ColDelemiter,RowDelemiter,'');
          //Ajout de la liste des champs
          for i := 0 to Fields.Count -1 do
            sTemp := sTemp + Fields.Item[i].Name + ColDelemiter;
          lst.Insert(0,Copy(sTemp,1,Length(sTemp) - Length(ColDelemiter)));
          lst.SaveToFile(Filename);
        finally
          lst.Free;
        end;
      end;
    end;
    utlisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RecordSetToCsv(AdoQuery1.Recordset,';',#13#10,'C:\test.csv');
    RecordSetToCsv(AdoTable1.Recordset,';',#13#10,'C:\test.csv');
    - Et la solution de Dirk-Pitt qui nécessite toute fois l'installation d'Excell sur le poste (il me semble, Dirk-Pitt me corrigera si je me trompe ^^)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre éclairé Avatar de Dirk-Pitt
    Inscrit en
    Juillet 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Juillet 2007
    Messages : 71
    Par défaut
    Citation Envoyé par Malatar
    - Et la solution de Dirk-Pitt qui nécessite toute fois l'installation d'Excell sur le poste
    Exact.

  6. #6
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    j'allais te proposer la méthode des fichiers texte avec séparateurs par point virgules et malatar la fait quand a moi j'utilise la grille de TMS j'ai même droit a une petit mise en forme (bordure,Couleur de remplissage...).

  7. #7
    Membre éclairé Avatar de Dirk-Pitt
    Inscrit en
    Juillet 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Juillet 2007
    Messages : 71
    Par défaut
    Au début j'utilisais également les fichiers CSV, mais un jour j'ai été coincé lorsque j'ai eu plus de 65535 lignes dans mon fichier. Je suis alors passé à un fichier XLS avec 65535 lignes par page maximum.

  8. #8
    Membre éclairé Avatar de Dirk-Pitt
    Inscrit en
    Juillet 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Juillet 2007
    Messages : 71
    Par défaut
    Un message digne d'intérêt sur le forum http://www.developpez.net/forums/showpost.php?p=2334410

  9. #9
    Membre averti
    Enseignant
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Par défaut
    Salut a vous tous;
    Mr.Aityahya; je travail avec les tables paradox7.

Discussions similaires

  1. Exporter des données d'un requete SQL vers excel (csv)
    Par PrinceMaster77 dans le forum ASP
    Réponses: 9
    Dernier message: 08/10/2005, 22h28
  2. exporter des données
    Par delpiero10 dans le forum Access
    Réponses: 6
    Dernier message: 28/09/2005, 20h16
  3. Réponses: 2
    Dernier message: 15/04/2005, 15h51
  4. importer et exporter des données
    Par denza1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/12/2004, 16h34
  5. Exporter des données sous forme de requetes
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2004, 17h27

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