Exportation d'un dbgrid vers excel

Signaler
Messages postés
19
Date d'inscription
jeudi 4 janvier 2007
Statut
Membre
Dernière intervention
28 novembre 2008
-
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017
-
bonjour, je voudrais exporter mon dbgrid et son contenu dans un fichier excel, ça se passe plus ou moins bien mais un petit soucis se pose et je pense trouver une solution chez vous voici mon code.

procedure TForm8.Button15Click(Sender: TObject);
var
     s:string;
     i,j,result:integer;
     MonClasseur : _workbook;
     MaFeuille :_Worksheet;


begin
     result:=-1;
     try
        MonClasseur:=ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);
        MaFeuille:=MonClasseur.Worksheets[1] as _worksheet;
     except
        exit;
     end;
     try
        for i:=0 to Form8.DBGrid1.FieldCount-1 do
          MaFeuille.Cells.Item[1,i+1].Value:=Form8.DBGrid1.Fields[i].FieldName;
        Form8.Tablecommandes_produits.First;
        for j:=2 to Form8.DBGrid1.FieldCount+1 do
          begin


            for i:=0 to Form8.DBGrid1.FieldCount-1 do
             try
               if Form8.DBGrid1.Fields[i].IsNull then MaFeuille.Cells.Item[j,i+1].Value:=''
               else
               if Form8.DBGrid1.Fields[i].DataType in [ftDate,ftDateTime] then
                  MaFeuille.Cells.Item[j,i+1].Value:=FormatDateTime('dd/mm/yyyy',Form8.DBGrid1.Fields[i].Value)
               else MaFeuille.Cells.Item[j,i+1].Value:=Form8.DBGrid1.Fields[i].AsString;
             except
               ShowMessage('Erreur');
             end;
            application.ProcessMessages;
            Form8.Tablecommandes_produits.Next;
          end;
        s:='D:\RESULTAT.xls'+#0;
        MonClasseur.Close(True,s,emptyparam,0);
le but de ce code est d'arriver à exporter ce que l'on voit dans le dbgrid c.à.d si j'effectue une requete par exemple je reclasse mes donnes par ordre asacendant numerique, je voudrai qu'il enregistre tel quelle, mais non au lieu de ça il n'exporte que la première ligne de du resultat de la requete qu'il repete sur toute la feuille excel, or moi je veus qu'il esporte tout le resultat, pouvez vous m'aidez à trouver ou est ce je comets l'erreure dans mon code
merçi d'avance et desolé pour la bible, mais je voulais etres le plus clair possible.

2 réponses

Messages postés
120
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
15 novembre 2007
1
Bjr

1) ce que ta grille affiche, c'est le contenu du dataset. Donc, je te conseillerai d'utiliser une boucle while not matable.eof pour parser tes lignes

2) ensuite, tes 2 boucles tournent sur Form8.DBGrid1.FieldCount . N'y aurait-il pas une erreur ?

3) enfin, je te conseille d'utiliser un tableau de variant, bien plus efficace pour transférer des tableuax de données dans excel.

Bon courage

J-Luc !
Messages postés
637
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
9 janvier 2017

Bonjour,

En copiant toute le dbgrid dans le presse papier il est alors possible de faire un copier/ coller, le séparateur de colonne est #9.

ce qui permet de copier une sélection...

yvessimon