AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen
Thema durchsuchen
Ansicht
Themen-Optionen

OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen

Ein Thema von owow · begonnen am 6. Mär 2012 · letzter Beitrag vom 7. Mär 2012
 
owow

Registriert seit: 6. Mär 2012
5 Beiträge
 
#1

OLE-Excel Verbindung schließen: Excel.exe Prozess bleibt bstehen

  Alt 6. Mär 2012, 09:33
Hallo zusammen,

ich verwende Delphi 2007 mit Excel 2007 und versuche eine Verbindung zu Excel wieder zu schließen sodass der Excel.exe Prozess korrekt beendet wird. Ich habe auch schon sehr viel danach gesucht (Google und hier), ein ExcelObj.Workbook.Close bringt keine Verbesserung, die einzigste vorhandene OleVariant Variable wird danach auch auf unassigned gesetzt, trotzdem bleibt der Prozess oben.
Was daran das seltsame ist: wenn das .Quit sowie das setzen auf unassigned in der gleichen Prozedur wie das CreateOleObject enthalten ist funktioniert es nicht, wenn es in einer anderen Prozedur enthalten ist wird der Excel.exe Prozess korrekt beendet! Könnt ihr mir erklären warum das so ist oder wie ich es innerhalb _einer_ Prozedur hinbekomme? Habe mal den relevanten Code in ein neues Beispielprojekt gepakt:

Code:
unit uMain;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, ComObj, StdCtrls;

type
   TForm1 = class(TForm)
     btnCreate: TButton;
     btnQuit: TButton;
     procedure btnCreateClick(Sender: TObject);
     procedure btnQuitClick(Sender: TObject);
   private
     { Private-Deklarationen }
     ExcelObj: OleVariant;
     procedure close_excel;
   public
     { Public-Deklarationen }
   end;

var
   Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnCreateClick(Sender: TObject);
begin
  try
   try
     ExcelObj:=CreateOleObject('Excel.Application');
     ExcelObj.Visible:= false;
     ExcelObj.DisplayAlerts:=false;
   except
     on e: exception do
     begin
      ShowMessage(e.Message+#13#10+
       'Kein Excel installiert?');
      exit;
     end;
   end;
  finally
    //close_excel; //geht hier nicht, daher raus
  end;
  //close_excel; //hier auch nicht, daher raus

  ShowMessage('pause');
end;

procedure TForm1.btnQuitClick(Sender: TObject);
begin
  close_excel; //hier funktioniert es, direkt und ohne die das ShowMessage bestätigen zu müssen
  ShowMessage('pause');
end;

procedure TForm1.close_excel;
begin
  if (not VarIsEmpty(ExcelObj)) then
  begin
   ExcelObj.quit;
   ExcelObj := unassigned;
  end;
end;

end.
  Mit Zitat antworten Zitat
 


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 00:17 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