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 :

Problème lors d'exportation des données vers un fichier Excel


Sujet :

Bases de données Delphi

  1. #1
    Membre éclairé

    Inscrit en
    Mai 2010
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 407
    Par défaut Problème lors d'exportation des données vers un fichier Excel
    Bonsoir à tous,
    pour l'exportation de mon Dataset vers un fichier Excel , j'utilise cette procédure :

    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
    procedure TFMonEtat.Button3Click(Sender: TObject);
    var Tab: _workbook;
        Feuil: _worksheet;
        i,j:Integer;
        S:shortstring;
    begin
       try
        ExcelApplication1.Connect;
        ExcelApplication1.Visible[0]:=False;
        Tab:=ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);
        //ExcelApplication1.Visible[0]:=true;
        feuil:=Tab.Worksheets[1] as _worksheet;
              For i:=0 to DBGrid1.Columns.Count-1 do
              begin
                with Feuil.Range[MonTableau[i+1]+'1',MonTableau[i+1]+'1'] do
                begin
                  Value[xlRangeValueDefault]:= DBGrid1.Columns.Items[i].Title.Caption;
                  Font.Name:='times new roman';
                  Font.Size:=10;
                  Font.Bold:=True;
                 With Interior do
                 begin
                      ColorIndex := 15;
                      Pattern := xlSolid;
                      PatternColorIndex := xlAutomatic;
                 End;
                 With Borders do
                 begin
                      LineStyle := xlContinuous;
                      Weight := xlThin;
                      ColorIndex := xlAutomatic;
                 End;
                end;
              end;
              j:=2;
              xQuery1.First;
              While not xQuery1.Eof do
              begin
                 For i:= 1 To  DBGrid1.Columns.Count Do
                 begin
                    s := MonTableau[i]+inttostr(j);
                   Feuil.Range[s,s].Value[xlRangeValueDefault] :=DBGrid1.Fields[i-1].AsString;
                 end;
                 xQuery1.Next;
                 j:=j+1;
              end;
     
     
       finally
     
            SUIMsgDlg(' Exportation des données Terminée . ','MyApp',mtInformation,[mbOK],suiMessageDialog1.UIStyle);
            ExcelApplication1.Visible[0]:=true;
            ExcelApplication1.Cells.Select;
            ExcelApplication1.Columns.AutoFit;
            ExcelApplication1.Range['A1','A1'].Select;
            ExcelApplication1.Disconnect;
       end;
     
    end;
    avec MonTableau est déclaré comme une variable globale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Var   MonTableau : array [1..26]of string[1]=('A','B','C','D','E','F','G','H','I','J','K','L',
                           'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');

    L’exportation s’exécute bien , mais pour des champs de type texte qui ont des valeurs numériques , ils sont considérés comme des champs de type numérique.
    même pour la date, elle est inversée ,
    c'est-à-dire au lieu du '18/02/2018' j’obtiens '02/18/2018'

    Nom : DbGridToExcel.png
Affichages : 596
Taille : 15,7 Ko

    Avez-vous une idée SVP ?

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 586
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je ne suis pas un spécialiste de l'export vers Excel, plutôt vers OpenOffice mais en gros je dirais que c'est votre faute puisque vous passez toutes vos valeurs comme des strings.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 961
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    je ne suis pas un spécialiste de l'export vers Excel, plutôt vers OpenOffice mais en gros je dirais que c'est votre faute puisque vous passez toutes vos valeurs comme des strings.
    Je dirais même que c'est la ligne suivante qui pose problème :
    Feuil.Range[s,s].Value[xlRangeValueDefault] :=DBGrid1.Fields[i-1].AsString;

  4. #4
    Membre éclairé

    Inscrit en
    Mai 2010
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 407
    Par défaut
    Bonjour.
    Merci pour vos réponses,
    Mais comment régler ce problème?

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 586
    Billets dans le blog
    65
    Par défaut
    si j'en crois la FAQ
    en utilisant value.
    C'est d'ailleurs ce que je fait pour OpenOffice des SetValue

    Donc quelque chose comme Feuil.Range[s,s].Value[xlRangeValueDefault] :=DBGrid1.Fields[i-1].value; serait déjà mieux AMHA, reste que pour les dates, j'ai un doute

  6. #6
    Membre éclairé

    Inscrit en
    Mai 2010
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 407
    Par défaut
    J ai déjà utilisé value au lieu de string,
    Et j ai eu le même problème.

  7. #7
    Membre éclairé

    Inscrit en
    Mai 2010
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 407
    Par défaut
    Bonjour a tous,
    une solution dont j'ai trouvée ,
    j'ai ajouté cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil.Range[s,s].NumberFormat  := 'Text';
    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    Feuil.Range[s,s].NumberFormat  := 'Text';
                    Feuil.Range[s,s].Value[xlRangeValueDefault] :=DBGrid1.Fields[i-1].AsString;
    puis je modifie les propriétés des colonnes directement dans le fichier excel généré .

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 591
    Par défaut
    Bonjour,

    Tu peux directement mettre en forme l'affichage de données chiffrées sans passer par le format "Text".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil.Range[s,s].NumberFormat  := '#,##0.00';
    Ainsi, tes valeurs seront affichées correctement. Le code complet est donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Feuil.Range[s,s].NumberFormat  := '#,##0.00';
    Feuil.Range[s,s].Value[xlRangeValueDefault] :=DBGrid1.Fields[i-1].AsString;
    J'utilise cette méthode régulière dans une application où les résultats doivent être affichés obligatoirement dans un tableau Excel.

    Bon courage

  9. #9
    Membre éclairé

    Inscrit en
    Mai 2010
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 407
    Par défaut
    Citation Envoyé par seabs Voir le message
    Bonjour,

    Tu peux directement mettre en forme l'affichage de données chiffrées sans passer par le format "Text".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil.Range[s,s].NumberFormat  := '#,##0.00';
    Merci seabs pour la réponse , j'ai déjà utilisé ce format mais ca na pas donnée de bonne résultat .

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 586
    Billets dans le blog
    65
    Par défaut
    Cela pourrait fonctionner à condition de changer les FormatSettings pour avoir le format US (aussi bien pour les dates que pour les nombres) et, bien évidemment , indiquer les format des colonnes.

    N'ayant Excel sur aucun de mes postes j'en reste là !

  11. #11
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 495
    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 495
    Par défaut
    Bonjour,

    essaye de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil.Range[s,s].Value[xlRangeValueDefault] := '''' + DBGrid1.Fields[i-1].AsString;
    Chez moi cela fonctionne depuis un StringGrid vers Excel :

    A+
    Charly

  12. #12
    Membre éclairé

    Inscrit en
    Mai 2010
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 407
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Bonjour,

    essaye de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil.Range[s,s].Value[xlRangeValueDefault] := '''' + DBGrid1.Fields[i-1].AsString;
    Chez moi cela fonctionne depuis un StringGrid vers Excel :

    A+
    Charly
    Merci Charly910 pour la réponse ,
    ça marche très bien , mais j'ai perdu le format monétaire pour les rubrique monétaire.

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 591
    Par défaut
    Bonjour,

    @SergioMaster
    Cela pourrait fonctionner à condition de changer les FormatSettings pour avoir le format US (aussi bien pour les dates que pour les nombres) et, bien évidemment , indiquer les format des colonnes.
    Si nous sommes en format français, il faut simplement inverser la ponctuation. Mettre une virgule comme ponctuation décimale et un point pour le séparateur des milliers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil.Range[s,s].NumberFormat  := '#.##0,00';
    Pour examiner ce qui est possible, il convient de faire des essais avec une macro VBA dans Excel, puis d'appliquer dans son application Delphi.
    C'est juste mon avis.

  14. #14
    Membre éclairé

    Inscrit en
    Mai 2010
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 407
    Par défaut
    Bonjour a tous,
    enfin , j'ai trouvé la solution
    il faut testé le type du champs dans le Dbgrid , puis affecter le format qui lui convient.

    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
                    if DBGrid1.Fields[i-1].DataType  = ftCurrency then
                    begin
                       //Feuil.Range[s,s].NumberFormat  := '#,##0.00';
                       Feuil.Range[s,s].Value[xlRangeValueDefault] := DBGrid1.Fields[i-1].AsCurrency;
                    end
                    else
                        if DBGrid1.Fields[i-1].DataType  in [ftDate,ftDateTime] then
                        begin
                           Feuil.Range[s,s].NumberFormat  := 'jj/mm/aaaa'; 
                           Feuil.Range[s,s].Value[xlRangeValueDefault] := DBGrid1.Fields[i-1].AsDateTime;
                        end
                        else
                          begin
                             Feuil.Range[s,s].NumberFormat  := 'Text';
                             Feuil.Range[s,s].Value[xlRangeValueDefault] := '''' + DBGrid1.Fields[i-1].AsString;
                          end ;
    peut être sa va être utile pour quelqu'un d'autre .
    Merci a vous tous.
    amicalement.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/01/2016, 12h44
  2. Exporter des données vers un fichier Excel
    Par providence dans le forum Import/Export
    Réponses: 5
    Dernier message: 13/08/2010, 18h36
  3. Réponses: 1
    Dernier message: 14/05/2007, 14h52
  4. [DELPHI6] Comment exporter des données vers un fichier XML ?
    Par zoaax dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/10/2006, 15h58
  5. exporter des données vers un fichier text
    Par JauB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/07/2006, 21h36

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