begin process at 2012 02 11 07:50:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Débutant(e)

 > 

Export DBGrid vers Excel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Export DBGrid vers Excel

mardi 1 avril 2008 à 15:02:07 | Export DBGrid vers Excel

grandyaka54

Bonjour,

J'ai créé un bouton me permettant d'exporter le contenu de mon DBGrid vers Excel via un fichier.csv.
Le soucis se passe au moment de lire de fichier sous Excel. J'ai un message d'erreur :
Impossible de lire l'enregistremnt 1. Faut-il continuer de signaler chaque erreur ?
Le contenu de mon DBGrid sont des strings. Il doit bloquer sur une colonne.
Par exemple, dans mon DBGrid, la donnée se présente ainsi : 12345678901234567890123
Dans le fichier .csv : idem
Mais dans Excel, j'ai : 1,2345E+22

Voici mon code :

//Export vers Excel
//-----------------
procedure TListTiersSociete.btnExcelClick(Sender: TObject);
var
  bm : TBookMark;
  f : TextFile;
  i : Integer;
  //Pour ouvrir le fichier sous Excel :
  aFileName : AnsiString;
  vMSExcel,MaFeuille : variant;
  vXLWorkbooks, vXLWorkbook, vUnused, vSeparator : variant;
begin

  //Exportation du fichier
  if not DirectoryExists(ExtractFilePath(Application.ExeName)+'Exports\') then
    ForceDirectories(ExtractFilePath(Application.ExeName)+'Exports\');

  SaveDialog1.InitialDir := ExpandFileName(ExtractFilePath(Application.ExeName)+'\Exports');
  SaveDialog1.FileName := 'TiersSocietes.csv';

  if SaveDialog1.Execute then
  begin
    bm := dbgTiers.DataSource.DataSet.GetBookmark;
    dbgTiers.DataSource.DataSet.DisableControls;
    try
      AssignFile(f,SaveDialog1.FileName);
      try
        Rewrite(f);
        for i := 0 to dbgTiers.Columns.Count-1 do Write (f,dbgTiers.Columns[i].Title.Caption+';');
        WriteLn(f);
        dbgTiers.DataSource.DataSet.First;
        while not dbgTiers.DataSource.DataSet.Eof do
        begin
          for i := 0 to dbgTiers.Columns.Count-1 do
            Write(f,dbgTiers.DataSource.DataSet.FieldByName(dbgTiers.Columns[i].FieldName).AsString+';');
          WriteLn(f);
          dbgTiers.DataSource.DataSet.Next;
        end;
      finally CloseFile(f);
      end; //Finally
    finally
      dbgTiers.DataSource.DataSet.EnableControls;
      dbgTiers.DataSource.DataSet.GotoBookmark(bm);
      dbgTiers.DataSource.DataSet.FreeBookmark(bm);
    end;   //Finally

    //Pour ouvrir le fichier sous Excel :
    if MessageBox(Handle,PChar('Export réussi.'+#13+#13+'Voulez-vous le visualiser sous Excel ?'),PChar('Confirmation'),MB_YESNO+MB_ICONEXCLAMATION+MB_DEFBUTTON2+MB_APPLMODAL)=IDYES
    then begin
      try
        try
          vMSExcel := GetActiveOleObject('Excel.Application');  //On regarde si Excel est déjà lancé.
        except
          vMSExcel := CreateOleObject('Excel.Application');     //Si Excel n'est pas déjà lancé.
        end;

        vMSExcel.Visible := true;   //Sinon on ne voit pas l'appli...

        aFileName :=  SaveDialog1.FileName;
        vUnused := unassigned;
        vSeparator := 4;
        vXLWorkbooks := vMSExcel.Workbooks;
        vXLWorkbook := vXLWorkbooks.Open(aFileName, vUnused, vUnused, vSeparator);

        MaFeuille := vXLWorkbook.Worksheets[1]; //as _worksheet;
        MaFeuille.Columns[1].Font.Bold:=True;   //Colonne titre en gras.
        MaFeuille.Rows[1].Font.Bold:=True;
        MaFeuille.Columns[1].HorizontalAlignment := xlLeft;
        MaFeuille.Rows[1].HorizontalAlignment := xlHAlignCenter;
        MaFeuille.Columns.AutoFit;
      finally
        //Il ne faut pas faire de Free des "Variant".
      end;
    end;
  end;

end;

Merci de m'éclairer  !

mercredi 2 avril 2008 à 16:49:24 | Re : Export DBGrid vers Excel

matrix1

Réponse acceptée !
@grandyaka54    "Par exemple, dans mon DBGrid, la donnée se présente ainsi : 12345678901234567890123
Dans le fichier .csv : idem
Mais dans Excel, j'ai : 1,2345E+22"

si j'ai bien comprie peut ete que c vrai t'as un string comme type de donnée sur ton Dbgrid mais sur la cellul de Excell c flotante alors tu change la proprieté de cellul en cellu texte ou tu met just un (') au debut pour que ça soit une cellul de type texte et tu peut ajouté une autre (') a la fin pour que ça soit pas moche , bien sure il bc d'autre solution mais c la plus rapide que je pense.

bonne chasse.
mardi 8 avril 2008 à 09:35:36 | Re : Export DBGrid vers Excel

grandyaka54

Avec un peu de retard...

Je te remercie de cette solution qui pour l'instant me dépanne. A l'occasion, je me pencherais de nouveau sur ce problème. Sur, il y a une solution, j'espère.
mardi 8 avril 2008 à 15:49:03 | Re : Export DBGrid vers Excel

matrix1

bien sure qu'il y a d'autre solution, tien tu n'as qu'à modifier le type de ta cellul

genr  MaFeuille.Range.NumberFormat='Text'   ;), j'aime bien t'aider plus mais tu sais la vie est trés courte
mercredi 16 avril 2008 à 16:19:03 | Re : Export DBGrid vers Excel

grandyaka54

Réponse acceptée !
Si l'on reprend mon probleme depuis le début, le message d'erreur était le suivant : Impossible de lire l'enregistremnt 1.
 => Pour cause, un des titres de la colonne était identifié par ID. Apparemment il n'aimait pas, du coup j'ai changer ID par Code et là aucun soucis, il m'affiche sans probleme le contenu de mon fichier .csv

Pour l'autre probleme ou il me transformait des strings en flottant, j'ai simplement mis des '' en début et fin.

Voilà...

mercredi 4 août 2010 à 20:23:50 | Re : Export DBGrid vers Excel

fazou1




ch info je veut savoir plus sur l'exporation des dbgrid vers excel


Cette discussion est classée dans : end, excel, dataset, datasource, dbgtiers


Répondre à ce message

Sujets en rapport avec ce message

affecter un dataSource au dataset d'un datasource :s [ par toonytoun ] Bonjour, comme chaque fin d'année je retourne vers vous pour vos lumières :)j'ai un petit probleme, je souhaite faire une fonction generique me permet Pb Application [ par Guenky ] Bonjour,J4ai un petit souci avec l'application que je suis en trainde construire...elle ne marche pas!!!(Tiens donc?!?)je vous en voie le code:unit Bi courbe de bézier [ par TouTSpeed ] bonjour j'aimerais que quelqu'un m'aide à résoudre un soucis !voici mon code ( la form7 sert a afficher la courbe ! )procedure TForm1.ButGraphClick(Se Excel et delphi [ par TouTSpeed ] Bonjourje sais définir le type de courbes sous excel grâce a ceci,XLApp.ActiveChart.ChartType:= xlColumnClustered;mais le souci et que cela affecte to TIBTable et TIBQuery - Récupérer les Displaylabel en une seule procedure [ par simonpelloquin ] Bonjour A partir du tutoriel de DelphiProg (j'adore ce tutoriel !), j'essaie de modifier le composant TComboBox pour le remplir automatiquement avec l coller presse papier---> excel [ par amelrc ] Bonjour, Comment je peux coller le contenu du presse papier dans un document excel (.xls) en de OLECONTAINER avec EXCEL [ par yvessimon ] Bonjour,Avec OLeConainer l'incrustation de EXCEL dans la fiche se fait sans difficultée.Par contre le menu par défaut ne permet pas de sauvegarder dir selection d'un mot dans une page web [ par nico8888 ] Bonjours à tous,Voila j'ai récupéré une partie d'un code qui est sensé repérer puis sélect Complicité entre deux Tcombobox! [ par jennybless ] Salut! Je viens de penser à quelque chose qui a tiré mon attention. Mais je ne sais comment m'en sortir. Y a t-il quelqu'un qui a déjà programmé ça.


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,574 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales