![]() |
Re: CSV Datei in Excel importieren
@mkinzler:
Wie greife ich denn nun auf die einzelnen Daten des Datesets zu? Was macht denn genau .First und .Next? |
Re: CSV Datei in Excel importieren
Es ist ja ein DataSet also
Delphi-Quellcode:
CSV.First;
while not CSV.Eof do begin ... := CSV.FieldByName('<feldname').Value; // Zugriff über Feldnamen oder ... := CSV.Fields[<pos>].Value; // Zugriff über Feldposition CSV.Next; end; |
Re: CSV Datei in Excel importieren
Hallo, danke,
probiere das gleich mal, habe nur irgendwie das Problem, dass das zeilenweise Einfügen der Werte in die Excelvorlage bei einem Sheet (~65500 DS) mehr als 30 sec dauert, das mal 5 würde dann insgesamt fast 4 min daueren, deswegen such ich einen weg die CSV Dateien zu importieren, anstatt sie zeilenweise einzufügen, so wie es bisher mache:
Delphi-Quellcode:
...
rocedure WriteDataToExcel(Vorlage:String;Filename:string);
var Excel: Variant; I: Integer; begin try // Ole Objekt erstellen und öffnen Excel:=CreateOleObject('Excel.Application'); // Excel Fenster sichtbar machen Excel.Visible:=true; // Excel.SaveData := False; // Neue Arbeitsmappe erstellen Excel.Workbooks.Open(Vorlage); // In Zelle A1 schreiben // Excel.Cells[1,1].Value:='!!!!!!!!!!!!!!!!!!!!!!!!!!!!'; try // Excel.activesheet.name := 'Datalogging1'; for I := 0 to 65531 do begin Excel.Cells[i+3,1].Value:=IntToStr(i); Application.ProcessMessages; end; // Testen ob das Excelsheet 'Übergabedaten' vorhanden ist // Excel.Sheets('Übergabedaten').Select; except // Exception.Create('<Tabelle Übergabgedaten existiert nicht>'); end; Excel.DisplayAlerts:=false; finally Excel.Quit; end; end; Vielen Dank! |
Re: CSV Datei in Excel importieren
Soll die Datei, die erzeugt wird umbedingt ne Excel-datei sein, oder würde der Umweg über mehrere CSV-Dateien auch gehen?
|
Re: CSV Datei in Excel importieren
Hallo,
also ich erzeuge bisher ja schon bis zu 5 CSV -Dateien. Die nur die eigentlichen Datensätze beinhalten, Jede CSV bildet den Inhalt eines Sheets ab. Nun will ich diese CSV in die Sheets der Vorlagendatei (Excel) laden und unter anderem Namen speichern also ungefähr so: Vorlagendatei[Sheet1] <-- CSVDatei1 Vorlagendatei[Sheet2] <-- CSVDatei1 Vorlagendatei[Sheet3] <-- CSVDatei1 Vorlagendatei[Sheet4] <-- CSVDatei1 Vorlagendatei[Sheet5] <-- CSVDatei1 Gruß |
Re: CSV Datei in Excel importieren
Ich habe jetzt mal die CSV-Datei in Excel importiert und davon ein Makro erzeugt,
habe aber Probleme das in Delphi zu übersetzen :???: Folgendes Makro:
Delphi-Quellcode:
Vielleicht ist ja jemand hier, der Excel und VBA Profi ist, der mir das in Delphi übersetzen kann.
'
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\daten1.csv", _ Destination:=Range("A3")) .Name = "daten1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 850 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = True .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With Gruß und Dank DelphiManiac |
Re: CSV Datei in Excel importieren
Hallo,
wenn ich das oben genannte Makro (das ich in Delphi umgesetzt habe) nutze um 65535 Zeilen zu importieren, und dann das Sheet wechslen will und die nächsten 65535 Zeilen importieren will, dann kommt die Meldung, dass für diese Aktion zu wenig Speicher vorhanden ist, woran liegt das. Und wie kann ich das umgehen? Gruß DelphiManiac |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:51 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