Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Export -> CSV mit Überschriften (https://www.delphipraxis.net/98931-export-csv-mit-ueberschriften.html)

HolgerCW 4. Sep 2007 10:59


Export -> CSV mit Überschriften
 
Hallo zusammen,

wenn ich mein DBGrid ohne Überschriften als CSV exportiere klappt das super.

Wenn ich nun in der ersten Zeile der CSV - Datei die Überschriften mit angebe klappt der Export auch, nur kommt beim starten der CSV - Datei in Excel folgende Fehlermeldung:

Kann Datensatz 1 nicht lesen. Weiterhin jeden Fehler anzeigen ?

-> Klicke dann auf 'Ja' und es kommt:

Excel hat festgestellt dass 'Dateiname.xls' eine SYLK-Datei ist, aber es kann die Datei nicht laden. Entweder ist die Datei fehlerhaft, oder es ist kein gültiges SYLK-Dateiformat. Klicken Sie OK, um die Datei in einem anderen Format zu öffnen.

-> Klicke ich dann auf OK, wird auch alles richtig dargestellt. Nur kommen halt vorher diese beiden Meldungen.

Was muss ich tuen ?

Gruss

Holger

mkinzler 4. Sep 2007 11:00

Re: Export -> CSV mit Überschriften
 
Wie exportierst du?
Wie sieht die Datei aus?
SYLK != CSV

HolgerCW 4. Sep 2007 11:09

Re: Export -> CSV mit Überschriften
 
Hi,

anbei mal die Exportierte CSV-Datei. -> CSV = verboten. Kann ich leider nicht hochladen

und mein Export Code:

Delphi-Quellcode:
//Exportieren eines DBGrids
procedure Exportieren(DBGrid: TDBGrid; Spalten:TStringList;Spaltennamen:TStringlist);
var
 Str: String;
 StrList: TStringList;
 I: Integer;
 T: Integer;
 Query :TQuery;
 MyFloat: Double;
 MyINt: Integer;
 MyDate: TDateTime;
begin

 I := 0;
 T := 0;

 StrList := TStringList.Create();

 Str := '';

 //Überschriften
 for T := 0 to Spalten.Count - 1 do
 begin

  Str := Str + Spaltennamen[T] + ';';

 end;

 StrList.Add(Str);

 Query := ((DBGrid.DataSource).DataSet as TQuery);

 Query.First;
 Query.DisableControls;

 //Daten
 while Query.Eof <> true do
 begin

  Str := '';

  for I := 0 to Spalten.Count - 1 do
  begin

   If Query['' + Spalten[I] + ''] <> Null then
   begin

    if TryStrToFloat(Query['' + Spalten[I] + ''], MyFloat) = True then
    begin

     Str := Str + floattostr(Query['' + Spalten[I] + '']) + ';';

    end
    else
    begin

     if TryStrToInt(Query['' + Spalten[I] + ''], MyInt) = True then
     begin

      Str := Str + inttostr(Query['' + Spalten[I] + '']) + ';';

     end
     else
     begin

      if TryStrToDate(Query['' + Spalten[I] + ''], MyDate) = True then
      begin

       Str := Str + datetostr(Query['' + Spalten[I] + '']) + ';';

      end
      else
      begin

       Str := Str + Query['' + Spalten[I] + ''] + ';';

      end;

     end;

    end;

   end
   else
   begin

    Str := Str + ' ;';

   end;

  end;

  StrList.Add(Str);
  Query.next;

  end;

  Query.EnableControls;

  //dann wird die Datei gespeichert
  StrList.SaveToFile('U:\Wächter\TerMaS\Files\Export_TerMaS.csv');

  //dann wird die Datei mit Excel geöffnet:
  ShellExecute(Application.Handle, 'OPEN', pchar('U:\Wächter\TerMaS\Files\Export_TerMaS.csv'), NIL, NIL, SW_NORMAL);

  //und schließlich die csv-Datei wieder gelöscht
  DeleteFile('U:\Wächter\TerMaS\Files\Export_TerMaS.csv');

end;
Schon mal danke.

Gruss

Holger

HolgerCW 6. Sep 2007 08:49

Re: Export -> CSV mit Überschriften
 
Weiss da keiner eine Lösung ?

Gruss

Holger

Surrounder 23. Nov 2007 08:45

Re: Export -> CSV mit Überschriften
 
Ich hatte das gleiche Problem, und habe festgestellt dass wenn man die Einträge der erste Zeile, also die Überschrift, in Anführungszeichen setzt dann geht es

mkinzler 23. Nov 2007 09:23

Re: Export -> CSV mit Überschriften
 
Delphi-Quellcode:
Str := Spaltennamen[0];

//Überschriften
for T := 1 to Spalten.Count - 1 do
begin

  Str := ', ' + Str + Spaltennamen[T] + ';';

end;

Surrounder 23. Nov 2007 09:37

Re: Export -> CSV mit Überschriften
 
genau das hatte ich, das ging aber nicht weil ich Spaltenüberschriften mit Leerzeichen hatte. Deshalb habe ich die Überschriften einfach in doppelte Hochkommas gesetzt, und dann ging es. Ansonsten hatte ich genau die gleiche Fehlermeldung wie von HolgerCW beschrieben. Ich dachte nur ich poste das für den fall dass das nochmals jemand sucht

mkinzler 23. Nov 2007 09:38

Re: Export -> CSV mit Überschriften
 
Mit ging es in meinem Beitrag um die fehlenden Trenner.

shmia 23. Nov 2007 10:12

Re: Export -> CSV mit Überschriften
 
Bei deinem Code ist schon der Ansatz falsch.
Exportiert wird nicht ein DBGrid, sondern ein TDataset.
Ob ein Feld exportiert wird, wird durch das Property Visible jedes Feldes entschieden.
Der Ablauf ist so:
eine Schleife über Dataset.Fields[]; wenn Feld Visible ist, dann fields[i].FieldName rausschreiben.
Dann eine Schleife über alle Datensätze:
Delphi-Quellcode:
while not dataset.eof do
begin
   // ***
   dataset.Next
end;
Dort wo die drei *** stehen, eine Schleife über alle Felder und fields[i].DisplayText rausschreiben.

wol 23. Nov 2007 22:56

Re: Export -> CSV mit Überschriften
 
Zitat:

Zitat von HolgerCW
Hallo zusammen,

wenn ich mein DBGrid ohne Überschriften als CSV exportiere klappt das super.
[.....]
Gruss

Holger

Versuch mal, die *.csv Datei nicht per doppelclick zu öffnen sondern:
aus Excel mit Datei/öffnen ...
Gruß Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz