![]() |
Prüfen, ob Excel installiert ist
Hallo allerseits,
ich greife von einem Delphi-Programm auf Excel zu. Um zu prüfen, ob Excel überhaupt installiert ist, verwende ich in einer try except Klausel CreateOleObject('Excel.Application'). Wenn Excel nicht installiert ist, wird ein Fehler ausgelöst und die Excel Funktionen des Programms gesperrt. etwa folgendermassen: FExcelIsInstalled := True; try try tApp := CreateOleObject('Excel.Application'); if not VarIsNull(tApp) then begin tApp.Visible := False; tApp.Quit; end else FExcelIsInstalled := False; except FExcelIsInstalled := False; end; finally tApp := UnAssigned; end; Leider scheint bereits der Aufruf CreateOleObject('Excel.Application') manchmal eine Access violation zu verursachen, wenn Excel nicht installiert ist. Kennt jemand eine elegantere Methode, um die Installation von Excel abzufragen? |
AW: Prüfen, ob Excel installiert ist
Hilft Dir das weiter?
Delphi-Quellcode:
Function IsExcelInstalled : Boolean;
var ClassID: TCLSID; strOLEObject: string; begin Result := False; strOLEObject := 'Excel.Application'; if (CLSIDFromProgID(PWideChar(WideString(strOLEObject)), ClassID) = S_OK) then Result := True else Result := False; end; |
AW: Prüfen, ob Excel installiert ist
Vielen Dank für die schnelle Antwort.
Das sieht schon mal gut aus. Werde es ausprobieren, und wenns Probleme gibt, mich wieder melden. |
AW: Prüfen, ob Excel installiert ist
Es sollte funktionieren. Ein wenig Google und siehe da, hab noch was auf SO gefunden was eventuell Dir nützlich sein könnte.
Delphi-Quellcode:
uses ComObj, ActiveX;
function IsObjectAvailable(const ClassName: string): Boolean; var ClassID: TCLSID; begin Result := Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), ClassID)); end; function IsObjectActive(const ClassName: string): Boolean; var ClassID: TCLSID; Unknown: IUnknown; begin Result := False; if Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), ClassID)) then Result := Succeeded(GetActiveObject(ClassID, nil, Unknown)); end; procedure TForm1.Button1Click(Sender: TObject); begin if IsObjectAvailable('Excel.Application') then ShowMessage('Excel is available'); if IsObjectActive('Excel.Application') then ShowMessage('Excel is running'); end; |
AW: Prüfen, ob Excel installiert ist
Hallo,
oder einfacher:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin if Excel_Vorhanden() then begin ShowMessage(' Excel ist vorhanden'); end else begin ShowMessage(' Excel ist nicht vorhanden'); end; end; function TForm1.Excel_Vorhanden (): boolean; var olevExcel: OleVariant; begin Result:= TRUE; try olevExcel := GetActiveOleObject('Excel.Application'); except try olevExcel := CreateOleObject('Excel.Application'); except Result:= FALSE; exit; end; end; end; Bis bald Chemiker |
AW: Prüfen, ob Excel installiert ist
Deine Methode wirft sofort eine Exception wenn man kein Excel installiert hat.
Ich mag meine Variante mehr :wink: Ps: Exception kommt nur wenn innnerhalb IDE ausgeführt. |
AW: Prüfen, ob Excel installiert ist
Zitat:
|
AW: Prüfen, ob Excel installiert ist
Kleiner Tipp:
![]() Verbindungsaufbau zu Excel
Code:
var Excel: Variant;
... try Excel := CreateOleObject('Excel.Application'); Excel.visible := true; except ShowMessage('Excel konnte nicht gestartet werden !'); end; Excel.DisplayAlerts:=False; // unterdrückt die Ausgabe Hinweisen von Excel Excel.Workbooks.Add; // um ein neues Sheet zu erstellen, ist demnach beim lesen eines vorhandenen Sheets nicht nötig! // hier folgen die eigentlichen Steuerbefehle... VarClear(Excel); // Freigabe |
AW: Prüfen, ob Excel installiert ist
Zitat:
Delphi-Quellcode:
Gruß
olevExcel := GetActiveOleObject('Excel.Application');
if oleexcel=unassigned then..... K-H |
AW: Prüfen, ob Excel installiert ist
GetActiveOleObject gibt eine Referenz auf die IDispatch-Schnittstelle des aktiven Objekts zurück.
Damit wird nicht überprüft, ob Excel installiert ist. Und CreateOleObject('Excel.Application') erzeugt eine Excel Instanz, welche im Hintergrund weiterläuft, falls diese nicht beendet wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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