Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Export DBGrid vers Excel [ Divers / Débutant(e) ] (grandyaka54)

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à...




Cette discussion est classé 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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,842 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.