Export DBGrid vers Excel [Résolu]

grandyaka54 97 Messages postés vendredi 19 octobre 2007Date d'inscription 18 décembre 2013 Dernière intervention - 1 avril 2008 à 15:02 - Dernière réponse : cs_fazou1 1 Messages postés mardi 3 août 2010Date d'inscription 4 août 2010 Dernière intervention
- 4 août 2010 à 20:23
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  !
Afficher la suite 

5 réponses

Répondre au sujet
cs_matrix1 175 Messages postés dimanche 16 février 2003Date d'inscription 15 avril 2008 Dernière intervention - 2 avril 2008 à 16:49
+3
Utile
[auteur/GRANDYAKA54/1178545.aspx @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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_matrix1
grandyaka54 97 Messages postés vendredi 19 octobre 2007Date d'inscription 18 décembre 2013 Dernière intervention - 16 avril 2008 à 16:19
+3
Utile
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à...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de grandyaka54
grandyaka54 97 Messages postés vendredi 19 octobre 2007Date d'inscription 18 décembre 2013 Dernière intervention - 8 avril 2008 à 09:35
0
Utile
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.
Commenter la réponse de grandyaka54
cs_matrix1 175 Messages postés dimanche 16 février 2003Date d'inscription 15 avril 2008 Dernière intervention - 8 avril 2008 à 15:49
0
Utile
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
Commenter la réponse de cs_matrix1
cs_fazou1 1 Messages postés mardi 3 août 2010Date d'inscription 4 août 2010 Dernière intervention - 4 août 2010 à 20:23
0
Utile
ch info je veut savoir plus sur l'exporation des dbgrid vers excel
Commenter la réponse de cs_fazou1

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.