Einzelnen Beitrag anzeigen

Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#18

AW: Obwohl ExcelApp.Quit wird aber nicht beendet

  Alt 9. Jan 2019, 09:38
Das Zauberwort für Zeilen mit Inhalt heißt in Excel "UsedRange", zudem kann man für workbook und worksheet auch variablen vergeben und leichter arbeiren:

Delphi-Quellcode:
VAR
  Excel : Variant;
  r,c : integer; // reicht evtl. nicht, je nach Anzahl der Zeilen
  wb,ws : Variant; //Ist das Ole-Variant, oder sollte man da besser was anderes nehmen, weiß ich gerade nicht?
  s: STRING;
BEGIN
  ...

  Excel := CreateOleObject('Excel.Application');
  Excel.visible := TRUE; (* vorher FALSE *)
  wb:=Excel.WorkBooks.Open('c:\users\....\TestKreditorenRechnungen.xlsx');
  ws:=wb.Worksheets['Tabelle1'];
   ...

  (* Es werden nur Daten gelesen *)
  for r:=1 to ws.UsedRange.Rows.Count do
    for c:=1 to ws.UsedRange.Columns.Count do
      s := ws.Cells[r,c].Value;
   ...

  ws:=unassigned;
  wb.Close(false);
  wb:=unassigned

  //nich mehr nötig wegen dem False beim Close
  //Excel.DisplayAlerts := False; (* Discard unsaved files.... *)
  Excel.Quit;
  Excel := unassigned;
Eine gute Hilfe ist es mMn in Excel den Makro-Rekorder anzuwerfen, das zu machen was man möchte. Dann den VBA-Code verstehen und aufräumen (der Makro-Rekorder übertreit es manchmal) und das dann in Delphi umsetzen.
Ralph

Geändert von Jumpy ( 9. Jan 2019 um 09:41 Uhr)
  Mit Zitat antworten Zitat