AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Excel richtig beenden aus Delphianwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Excel richtig beenden aus Delphianwendung

Ein Thema von okoeller · begonnen am 5. Mär 2008 · letzter Beitrag vom 6. Mär 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Chemiker
Chemiker

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

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 20:27
Hallo okoeller,

versuchst mal mit dieser Function:

Delphi-Quellcode:
{-------------------------------------------------------------------------------
Funktion:  EXCELOhneNachFragenSchliessen()
Bemerkung: Mit dieser Function wird das neu aktive WorkBook unter den unter
            DateiName angegeben Namen abgespeichert. Dabei wird die Rückfrage
            "Sollen Ihre Änderungen in <Datei> gespeichert werden?" erscheint
            immer, wenn eine Arbeitsmappe geschlossen wird, welche nicht
            gespeicherte Änderungen enthält unterdrückt. Die Datei wird immer
            abgespeichert, auch wenn diese keine Änderung enthält.
Parameter: m_Excel :Variant    // Ist die Excel-Apllication-Variable.
            WorkBobj:olevariant  // Ist die Aktuelle Workbook-Variable.
            DateiName: String    // Ist der komplette Path mit Laufwerk, Path
                                // und DateiName.
Functions-Wert: = TRUE  // alles Klar die Datei ist normal abgespeichert
                        // worden.
                = FALSE // Es ist beim Abspeichern ein Fehler aufgetreten.
Version:    1.01
letz.Ändr.: 12.05.2006
-------------------------------------------------------------------------------}

function EXCELOhneNachFragenSchliessen(m_Excel: Variant; WorkBobj: olevariant;
         const DateiName: String): Boolean;
begin
  Result:= FALSE;
  m_Excel.Application.DisplayAlerts := False; // Alle Rückfragen ausstellen
  try
    WorkBobj.saved := FALSE;
    WorkBobj.Close (saveChanges:=TRUE, FileName:=DateiName);
    Result:= TRUE; // Alles OK dann wird TRUE zurückgegeben.
  finally
    m_Excel.Application.DisplayAlerts := TRUE; // Alle Rückfragen anstellen
    m_Excel.Quit;
  end;
end;


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

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 22:14
WorkBobj.Close (saveChanges:=TRUE, FileName:=DateiName); Was ist das für ein Aufruf?
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

Re: Excel richtig beenden aus Delphianwendung

  Alt 5. Mär 2008, 22:53
Hallo dominikkv,

damit wird die Arbeitsmappe unter den angegeben Dateiname abgespeichert.

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

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Excel richtig beenden aus Delphianwendung

  Alt 6. Mär 2008, 11:12
Also ich hab mir mit Process Explorer die laufenden Prozesse angesehen. Wenn ich das richtig interpretiere wird beim Öffenen der ExcelDatei vom Betriebssystem ein Termialprozess zur Verfügung gestellt, der leider nicht geschlossen/beendet wird, wenn Excel von der Delphianwendung geschlossen wird. Ob man da nun eingreifen kann/sollte bin ich mir nicht so sicher, ich bein kein Experte.


Oliver
Miniaturansicht angehängter Grafiken
excel_als_terminaldienst_207.png  
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#15

Re: Excel richtig beenden aus Delphianwendung

  Alt 6. Mär 2008, 11:22
Zitat von Apollonius:
Ich würde auf jeden Fall von solchen TerminateProcess-Abenteuern abraten. Das behebt nur die Symptome und nicht das zugrunde liegende Problem.
Da hast du wirklich recht!!
Ich wiederhole den Sourcecode nochmal:
Delphi-Quellcode:
procedure TExcelImport.OeffneDatei(Dateiname: string);
begin
  try
    FExcel:= CreateOleObject('Excel.Application');
    FExcel.Visible := false;
    FExcel.WorkBooks.Open(Dateiname);
    FSheet := FExcel.Workbooks[1].WorkSheets[1];

  except
    on E:EOleException do
    begin
      FExcel.Quit;
      raise EFileAccessException.Erzeugen('Die Datei konnte nicht geöffnet werden: ' + E.ClassName);
    end;
  end;
end;
Also gibt es jetzt 2 aktive Objekte: FExcel und FSheet !!
Nur wenn man beide auf Unassigned setzt, kann sich Excel selbst beenden.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

Re: Excel richtig beenden aus Delphianwendung

  Alt 6. Mär 2008, 19:51
Hallo okoeller,

das Problem ist, dass Du Excel mehrmals öffnest, ohne es zuvor zu Schließen.

1 Excel Aufruf
2 Excel Aufruf

1 Excel Schließen

Dann verbleibt der 1 Excel – Aufruf im Speicher.
Selbst wenn Du die Delphi – Anwendung schließt bleibt er dort.

Um den Speicher ordentlich zu hinterlassen sollte man so vorgehen:

1 Excel Aufruf
1 Excel Schließen

2 Excel Aufruf
2 Excel Schließen

usw.

Geht man so vor, bleibt ein Excel – Prozess im Speicher bis die Delphi – Anwendung geschlossen wird.

Man könnte nun prüfen, ob Excel schon läuft unter der Variable FExcel.

Delphi-Quellcode:
if VarIsEmpty(FExcel) then
begin
    EXCELStarten (FExcel);
end;
Um Excel restlos aus den Speicher zu löschen, ohne die Delphi – Anwendung zu schließen:

Delphi-Quellcode:
procedure TExcelImport.QuitExcel;
begin
  FSheet:= Unassigned;
  if not VarIsEmpty(FExcel) then
  begin
    FExcel.DisplayAlerts := False;
    FExcel.Quit;
    FExcel:= Unassigned;
  end;
end;
Wenn noch weitere Objekte eine Verbindung zu Excel haben, sind diese auch zu schließen, bevor Excel geschlossen wird, sonst verbleibt der Excel – Prozess bis zum Beenden der Delphi – Anwendung im Speicher.

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

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#17

Re: Excel richtig beenden aus Delphianwendung

  Alt 6. Mär 2008, 20:29
Zitat von Chemiker:
Hallo dominikkv,

damit wird die Arbeitsmappe unter den angegeben Dateiname abgespeichert.

Bis bald Chemiker
Mir geht es um die Argumente...
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

Re: Excel richtig beenden aus Delphianwendung

  Alt 6. Mär 2008, 20:58
Hallo dominikkv,

WorkBobj.Close (saveChanges:=TRUE, FileName:=DateiName); Mit dem Parameter saveChanges wird festgelegt, ob die Änderung in der Arbeitsmappe gespeichert oder verworfen wird. Gibt man saveChanges nicht an, so wird der Benutzer danach gefragt.

TRUE = Änderungen werden gespeichert
FALSE = Änderungen werden verworfen

Sollte die Arbeitmappe noch keinen Namen haben, und sollen die Änderungen gespeichert werden, muss unter FileName ein Dateiname angegeben werden.
Ansonsten wird der Benutzer aufgefordert, einen Namen und Path anzugeben.

Die Funktion soll diese beiden Nachfragen unterdrücken, damit wird Excel geschlossen ohne lästiges Nachfragen.

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

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Excel richtig beenden aus Delphianwendung

  Alt 6. Mär 2008, 21:54
Hallo Chemiker,

mit der untenstehenden Methode lässt sich Excel nun endlich aus dem Speicher entfernen.

Delphi-Quellcode:
procedure TExcelImport.QuitExcel;
begin
  FExcel.DisplayAlerts := False;
  FExcel.Quit;
  FExcel := unassigned;
  FSheet := unassigned;

end;
Der springende Punkt war, dass auch FSheet auf unassinged gesetzt werden musste.
Jetzt funktioniert es einwandfrei.
Anmerkung: Vielleicht ist das auch vom Betriebssystem abhängig, auf Vista hatten wir dies Problem gar nicht.

Ich bedanke mich für alle Beträge und die wertvollen Hinweise.

Oliver
  Mit Zitat antworten Zitat
gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#20

Re: Excel richtig beenden aus Delphianwendung

  Alt 6. Mär 2008, 23:37
Auch wenn ich, zugegeben, nicht alle Posts gelesen hab, ich hab schon mit MS-Office 2000 festgestellt, dass es besser ist, sich an einem laufendem MS-Word/Excel/Visio-Process "ran zu hängen" als es im Code explizit neu zu starten.

Wenn man feststellen kann, dass ein Excel bereits läuft, dann öffnet man das Excel-Dokument in laufenden Excel, wenn kein Excel läuft, dann startet man Excel man halt neu per ActiveX.

Wie das alles funktioniert steht definitiv hier im DP-Forum! (Denn von da hab ich den Delphi-Code her )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz