![]() |
CSV Datei erstellen
Hallo erstmal,
bin neu hier im Forum und hab gleich mal eine Frage. Ich möchte einen String in eine CSV Datei exportieren. Hier mal kurz mein Quellcode.
Delphi-Quellcode:
Das Problem ist nun, dass die Datei erstellt wird aber nicht korrekt dargestellt wird. Wenn ich die CSV Datei mit dem Editor öffne, werden die Datenfelder und die Werte korrekt dargestellt. Öffne ich die CSV Datei aber mit Excel, stimmen die Feldern und Werte nicht mehr überein.//GCSV wurde vorher als TStrings deklariert GCSV.Text := 'Fahrzeugart;Interner Name;Angebotsart;Kategorie;Marke;Modell;Leistung;' + 'Hubraum;EZ;TUV;AU;Kmstand;Preis;Haendlerpreis;VHB;Sofortkaufpreis;Startpreis;' + 'Wiederbeschaffungswert;Mwst. ausweisbar;Mwstsatz;Arbeitskosten;Lackkosten;' + 'Ersatzteilkosten;Reparaturkosten;Anzeigedauer;Angebotsende/Enduhrzeit;' + 'Waehrung;Land;PLZ;Kraftstoff;Automatikgetriebe;Tueren;Farbe;Metallic;' + 'Unfallfahrzeug;Schadenbeschreibung;Vorschaden/Altschaden;Neufahrzeug;' + 'Jahresfahrzeug;Oldtimer;Taxi/Mietfahrzeug;Garantie;Info/Ausstattung;' + 'ABS;ESP;Allradantrieb;Anhaengerkuplung;Klimaanlage;Alufelgen;Lederausstattung;' + 'Sitzheizung;Wegfahrsperre;Navigationsystem;Zentralverriegelung;Tempomat;' + 'Serviceheft;Elektrostarter;Katalysator;Halbverkleidung;Vollverkleidung;' + 'Windschild;Topcase;EBS;Hydraulik;Intarder;Ladebordwand;Retarder;Schiebetuer;' + 'Trennwand;Vorfuehrfahrzeug;Kran;Tragkraft;Nutzlast;Gesamtgewicht;Hubhoehe;' + 'Bauhoehe;Betriebsstunden;Sitze;Schadstoff;Kabinenart;Achsen;Schlafplatz;TV;WC;' + 'Kompressor;Fronthydraulik;Frontheber;Kuehlanlage;Lueftfederung;Zentralschmierung;' + 'Standheizung;Kueche;Kraftstoffverbr.innerorts;Kraftstoffverbr.ausserorts;' + 'Kraftstoffverbr.ca. (im Durchschnitt);CO2-Emissionen kombiniert;' + 'Fahrzeughalter/Ansprechpartner Name;Fahrzeughalter/Ansprechpartner Vorname;' + 'Fahrzeughalter/Ansprechpartner Telefon;Fahrzeughalter/Ansprechpartner Mobil;' + 'Fahrzeughalter/Ansprechpartner E-Mail;Fahrzeughalter/Ansprechpartner Strasse Haus- Nr;' + 'Fahrzeughalter/Ansprechpartner Ort;Fahrzeughalter/Ansprechpartner PLZ;' + 'Fahrzeughalter/Ansprechpartner Land'; if CBMwSt.Text = 'n.ausweisbar' then begin hMwSTAus := '0'; end else begin hMwSTAus := '1'; end; if CBMwSt.Text = 'Deutschland' then begin hLand := 'D'; end; if BesAutomatik.Checked then begin hAutoMa := '1'; end else begin hAutoMa := '0'; end; if CBMetallic.Checked then begin hMetallic := '1'; end else begin hMetallic := '0'; end; GCSV.Text := GCSV.Text + CBFzgArt.Text + ';' + EditGaNr.Text + ';' + 'restwert' + ';' + CBKateg.Text + ';' + CBMarke.Text + ';' + EditModell.Text + ';' + EditLeist.Text + ';' + EditHubraum.Text + ';' + '00/' + EditEZ.Text + ';' + '00/' + EditTUEV.Text + ';' + '00/' + EditTUEV.Text + ';' + EditKM.Text + ';' + '0' + ';' + ';' + '0' + ';' + '0' + ';' + '0' + ';' + '0' + ';' + EditWieder.Text + ';' + hMwSTAus + ';' + CBMwStSatz.Text + ';' + EditLohn.Text + ';' + EditLack.Text + ';' + EditErsatz.Text + ';' + EditGesamt.Text + ';' + CBAnzDauer.Text + ';' + CBAnzEnde.Text + ';' + CBWaehr.Text + ';' + CBOrtPlz.Text + ';' + hLand + ';' + EditPlz.Text + ';' + CBKraftStoff.Text + ';' + hAutoMa + ';' + EditTueren.Text + ';' + CBFarbe.Text + ';' + hMetallic + ';' + '' + ';' + MemoUnfall.Text + ';' + MemoVorSchaden.Text + ';'; //SDCSV SaveDialog with SDCSV do begin Filter := 'CSV Dateien (*.csv)|*.csv'; FileName := EditGaNr.Text; DefaultExt := 'csv'; Options := [ofOverwritePrompt]; if Execute then GCSV.SaveToFile(FileName); Gruß Andreas |
Re: CSV Datei erstellen
Was gibst du denn bei Excel als Trennzeichen an bzw. was ist voreinegstellt? Und was heißt "stimmen die Feldern und Werte nicht mehr überein"?
|
Re: CSV Datei erstellen
inwiefern stimmen die daten nicht mit den feldern überein?
wenn die CSV im editor richtig angezeigt wird, dann hat wohl dien excel ein problem oder so ;) aenogym |
Re: CSV Datei erstellen
Das weiss ich eben nicht ob das Problem bei Excel liegt oder bei mir. Ich habe eine CSV Datei als Vorlage. Dort wird in A1 die Datenfelder angegeben und in A2 die Werte zu den Feldern. Trennzeichen ist Semikolon.
Bei meiner Datei werden in A1 die Datenfelder angegeben und in A2, B2, C2 usw. Wenn ich die erstellte CSV Datei im Editor öffne passt alles. Deshalb bin ich ein bischen verwirrt. |
Re: CSV Datei erstellen
also hast möchtest du eine vertikale tabelle, dein delphiprogramm macht aber eine horizontale tabelle.
deine CSV-Datei sieht jetzt quasi so aus:
Code:
damit du in excel aber das gewünschte aussehen bekommst, muss deine CSV-datei folgendermaßen aussehen:
Feld1;Feld2;Feld3
Wert11;Wert12;Wert13 Wert21;Wert22;Wert23
Code:
aenogym
Feld1;Wert11;Wert21
Feld2;Wert12;Wert22 Feld3;Wert13;Wert23 |
Re: CSV Datei erstellen
so sollte es sein(laut Vorlage!)
Delphi-Quellcode:
und so ist es
A1 = Fahrzeug; Kilometerstand; Farbe; Nummer; Kennzeichen;
A2 = Opel; 155555; Gelb; 12345; S-H 152;
Delphi-Quellcode:
A,B,C beziehen sich auf die Excel Felder. Wie gesagt im Editor wird es korrekt angezeigt.
A1 = Fahrzeug; Kilometerstand; Farbe; Nummer; Kennzeichen;
A2 = Opel; 155555; B2=Gelb; 12345; C2= S-H 152; Also
Delphi-Quellcode:
Hintergrund : Es soll eine Schnittstelle werden. Die Daten werden im CSV Format übertragen!
Fahrzeug; Kilometerstand; Farbe; Nummer; Kennzeichen
Opel; 155555; Gelb; 12345; S-H 152; |
Re: CSV Datei erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
hm,
also das semikolon trennt doch die einzelnen Zellen voneinander. deswegen kann ich es mir nicht erklären, wieso excel das bei dir so anzeigt. im anhang siehst du, wie excel mir folgende CSV-datei anzeigt.
Code:
Fahrzeug; Kilometerstand; Farbe; Nummer; Kennzeichen;
Opel; 155555; Gelb; 12345; S-H 152; |
Re: CSV Datei erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
die Datei soll nicht in Excel importiert werden, sonder über eine Webschnitstelle. Ich muss die Datei im CSV Format übergeben.
Vorlage wie es aussehen sollte ist im Anhang. |
Re: CSV Datei erstellen
hm in deinem code aus dem ersten beitrag sehe ich nirgends, dass du einen zeilenumbruch einfügst.
demnach würde sämtliche werte nacheinander in der textdatei stehen. und dann hast du den effekt, dass sich alle über eine zeile erstreckt. |
Re: CSV Datei erstellen
So was :
Delphi-Quellcode:
ist sehr gefährlich. Was soll das machen, bzw. warum ein String-Vergleich ? Die Daten sollen geschrieben werden, oder ? Die Knackpunkte wurden allerdings bereits genannt : Trennzeichen und Zeilenende. Der Savedialog verkompliziert die Sache sowieso. Schreibe doch besser zeilenweise.
if CBMwSt.Text = 'n.ausweisbar' then
|
Re: CSV Datei erstellen
Strings müssen beim CSV Format in '"' eingeschlossen werden:
Code:
"Ein String";234;OderSo;"Aber so kann man auch Sonderzeichen ;;;;=";"darstellen"
|
Re: CSV Datei erstellen
Zitat:
|
Re: CSV Datei erstellen
wieso zeilenumbruch? wenn ich die .csv datei über den editor öffne, passt ja alles? hat jemand einen alternativvorschlag für meinen quellcode.
laut der vorlage die ich erhalten habe, sind die strings auch nicht in "" eingeschlossen. trennzeichen sind semikolon , alles was dazwischen steht wird als string interpretiert!so zumindest steht es in der doku die ich erhalten habe. |
Re: CSV Datei erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
So benutzt man die Klasse:
Delphi-Quellcode:
Im Zweifelsfall check mal EXCEL, ob es Deine Daten einlesen kann. Wenn ja, muss die Gegenseite nachbessern :mrgreen:
Var
C : TCSVExcel; Begin C := TCSVExcel.Create ('MyExport.CSV'); C.Open; C.AddString('Ein String'); // Mit '"' C.AddUnquoted('Noch einer'); // Ohne '"' C.AddInteger (123); C.AddFloat (123.45); C.AddDate (StrToDate ('24.12.2005')); C.NewLine; ... Nächste Zeile C.Close; c.Free; End; |
Re: CSV Datei erstellen
danke erstmal für deine Klasse.Folgendes, wenn ich meine .csv Datei öffne und als txt speichere, kann ich die txt ohne Problem in Excel einlesen. Probier mal so wie Du es vorgeschlagen hast.
Danke |
Re: CSV Datei erstellen
Wenn Du sie als TXT speicherst, musst Du aber durch den Import-Assistenten durchgehen... Mit CSV sollte das unnötig sein.
Jetz fällt mir ein, das wir die Quotes ('"') für den Datenaustausch mit einem anderen ERP-System benötigt haben. Es kann sein, das die '"' gar nicht zur Spezifikation gehören. Andere Fallstricke sind aber z.B. Dezimalpunkte (Punkt, oder Komma?) und das Datumsformat. Typisch Amis: Denken sich CSV aus, nennen das auch noch 'Comma Separated Values' und benutzen dann den variablen Listentrenner, Dezimalpunkt sowie Datumsformat und trennzeichen. Eigentlich müsste das Format so heissen: "Listseparator separated Values which cannot be exchanged among PCs with different national settings (or even PC which stand next to each other)" Ich würde so vorgehen: Erstelle eine Beispieldatei in Excel (eine Zeile reicht ja). Speichere sie als CSV und analysiere den Inhalt. Bastle solange herum, bis Dein Output dem EXCEL-Format entspricht. |
Re: CSV Datei erstellen
also hab des rätsels lösung. das problem liegt darin, dass excel die von mir erstellte .csv datei nicht richtig darstellt.
ich habs denen mal geschickt und die hatten kein problem meine datei zu importieren. also der ganze zirkus, für die katz. trotzdem danke für die anteilnahme. gruß andreas |
Re: CSV Datei erstellen
ach nochwas. wie kann ich beim savedialog die einzelnen buttons ansprechen. also wenn ich ok drückt kommt "bla" und wenn ich abbrechen drück kommt "blabla".
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz