Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi CSV Datei in Excel importieren (https://www.delphipraxis.net/87417-csv-datei-excel-importieren.html)

DelphiManiac 2. Mär 2007 10:00

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?

mkinzler 2. Mär 2007 10:06

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;

DelphiManiac 2. Mär 2007 10:45

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!

mkinzler 2. Mär 2007 10:50

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?

DelphiManiac 2. Mär 2007 10:55

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ß

DelphiManiac 2. Mär 2007 11:33

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:
'
    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
Vielleicht ist ja jemand hier, der Excel und VBA Profi ist, der mir das in Delphi übersetzen kann.

Gruß und Dank
DelphiManiac

DelphiManiac 6. Mär 2007 10:50

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.
Seite 3 von 3     123   

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