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

  1. #1
    Membre à l'essai
    Enseignant
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 10
    Points
    10
    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 : 48
    Localisation : Algérie

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    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 régulier Avatar de Dirk-Pitt
    Inscrit en
    Juillet 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Juillet 2007
    Messages : 71
    Points : 81
    Points
    81
    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 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    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 régulier Avatar de Dirk-Pitt
    Inscrit en
    Juillet 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Juillet 2007
    Messages : 71
    Points : 81
    Points
    81
    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 : 48
    Localisation : Algérie

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    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 régulier Avatar de Dirk-Pitt
    Inscrit en
    Juillet 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Juillet 2007
    Messages : 71
    Points : 81
    Points
    81
    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 régulier Avatar de Dirk-Pitt
    Inscrit en
    Juillet 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Juillet 2007
    Messages : 71
    Points : 81
    Points
    81
    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 à l'essai
    Enseignant
    Inscrit en
    Février 2005
    Messages
    8
    Détails du profil
    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2005
    Messages : 8
    Points : 10
    Points
    10
    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