AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Obwohl ExcelApp.Quit wird aber nicht beendet
Thema durchsuchen
Ansicht
Themen-Optionen

Obwohl ExcelApp.Quit wird aber nicht beendet

Ein Thema von t0mmy · begonnen am 2. Jul 2012 · letzter Beitrag vom 10. Jan 2019
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Obwohl ExcelApp.Quit wird aber nicht beendet

  Alt 9. Jan 2019, 05:10
Hallo,
vielleicht liegt es ja an der Datei?
Erzeuge doch mal die Excel-Klasse und gib sie danach sofort wieder frei und das Laden der Datei.
Heiko
  Mit Zitat antworten Zitat
Jumpy

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

AW: Obwohl ExcelApp.Quit wird aber nicht beendet

  Alt 9. Jan 2019, 08: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 08:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Obwohl ExcelApp.Quit wird aber nicht beendet

  Alt 9. Jan 2019, 17:08
Hallo,

ws.UsedRange.Rows.Count
das muss aber auch nicht immer richtig sein. Sollte die erste Zeile komplett leer sein, wird dies zu einem falschen Ergebnis führen, weil die letzte Zeile nicht mehr ausgelesen wird.

ws.UsedRange.Columns.Count
Das gleiche Problem ist, wenn die erste Spalte komplett leer ist, führt dies auch zu einem falschen Ergebnis.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Obwohl ExcelApp.Quit wird aber nicht beendet

  Alt 9. Jan 2019, 17:53
Hallo,
Zitat:
Das eigentliche Problem, das Entfernen von EXCEL, ist damit für mich noch nicht gelöst.
Hast du denn meinen Tipp mal ausprobiert?
Heiko
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
115 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Obwohl ExcelApp.Quit wird aber nicht beendet

  Alt 9. Jan 2019, 21:20
@Hoika

Danke für deinen Tipp. Werde ich noch ausprobieren.

Zurzeit lebe ich mit dem Problem (Löschen im Taskmanager),
ich muss vorerst mal Resultate liefern.

Danke an alle Mitdenkenden.
  Mit Zitat antworten Zitat
Jumpy

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

AW: Obwohl ExcelApp.Quit wird aber nicht beendet

  Alt 10. Jan 2019, 08:40
Hallo,

ws.UsedRange.Rows.Count
das muss aber auch nicht immer richtig sein. Sollte die erste Zeile komplett leer sein, wird dies zu einem falschen Ergebnis führen, weil die letzte Zeile nicht mehr ausgelesen wird.

ws.UsedRange.Columns.Count
Das gleiche Problem ist, wenn die erste Spalte komplett leer ist, führt dies auch zu einem falschen Ergebnis.

Bis bald Chemiker
Das kannte ich noch nicht und wollte ich gar nicht glauben, aber ein schneller Test mit Execl bestätigt das. Tatsächlich werden scheinbar nur die Zeilen gezählt von der ersten in der was drin steht bis zur letzten in der was drin steht. Sind also die ersten drei zeilen leer und nur in Zeile 4 steht was drin ist Used.Range.Rows.Count trotzdem nur 1.
Bei uns war das bisher keinem aufgefallen, weil in Zeile 1 immer was steht.
Aber wenn man genauer drüber nachdenkt ist das eine genaue Interprätation des Begriffs "UsedRange".

Womit die Ermittlung der letzten Zeile/Spalte dann funtioniert, wäre z.B.:
ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row , wobei xlCellTypeLastCell den Wert 11 hat.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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