![]() |
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. |
AW: Prüfen, ob Excel installiert ist
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Testet Ihr eigentlich das? Eine Test-Möglichkeit wäre das 'Excel.Application' mit Quatsch zu ersetzen und schauen was passiert. Ob nun als exception wie beim Chemiker oder Fehler wie das obige, man will doch eigentlich genau so etwas verhindern? Zitat:
|
AW: Prüfen, ob Excel installiert ist
Zitat:
Ist das falsch? |
AW: Prüfen, ob Excel installiert ist
Delphi-Quellcode:
uses
ActiveX; function IsInstalled(AValue : String) : Boolean; var ClassID: TCLSID; begin Result := CLSIDFromProgID(PWideChar(WideString(AVAlue)), ClassID) = S_OK; end; function IsExcelInstalled : Boolean; var ClassID: TCLSID; begin Result := CLSIDFromProgID(PWideChar(WideString('Excel.Application')), ClassID) = S_OK; end; // oder: function IsExcelInstalled : Boolean; begin Result := IsInstalled('Excel.Application'); end; procedure TForm1.WelcheProzedurAuchImmer(Sender: TObject); begin // Prüfen, ob Excel installiert ist: if IsExcelInstalled then ShowMessage('ja') else ShowMessage('nein'); // Prüfen, ob die als Parameter übergebene Software installiert ist: if IsInstalled('Excel.Application') then ShowMessage('ja') else ShowMessage('nein'); if IsInstalled('Word.Application') then ShowMessage('ja') else ShowMessage('nein'); end; |
AW: Prüfen, ob Excel installiert ist
Zitat:
Wenn Excel vorher schon lief? Wenn Excel vorher noch nicht lief? Wenn Du vorm Programmende der "Excelvariabel" was anderes zuweist? |
AW: Prüfen, ob Excel installiert ist
Gesagt, getan, verstanden.:oops:
|
AW: Prüfen, ob Excel installiert ist
Zitat:
Gruß K-H |
AW: Prüfen, ob Excel installiert ist
Hallo zusammen,
@ Luckie: Also, in meinen Programmen machte es absolut keinen Sinn, ohne Excel weiterzuarbeiten. Aus diesem Grund kann man eine Exception verwenden. @KodeZwerg: Mit Deinem Code (der veraltet ist) baust Du CreateOleObject/GetActiveOleObject eigentlich nur nach. Bis bald Chemiker |
AW: Prüfen, ob Excel installiert ist
Zitat:
Ich muss mal debuggen um das nachzuvollziehen was Du da schreibst. Veraltet? Wie lautet bitte NextGen Befehl der meinen Ersetzt? (CLSIDFromProgID) |
AW: Prüfen, ob Excel installiert ist
Vielen Dank schon mal für die vielen Vorschläge.
ich hab mich mal für die Version: 'Result := CLSIDFromProgID(PWideChar(WideString('Excel.Applic ation')), ClassID) = S_OK;' entschieden. Noch eine weitere Frage. Auf neuen Rechnern mit Windows 10 ist meist eine vorinstallierte, aber nicht voll funktionsfähige Excel Version vorhanden, welche wohl zum Kauf einer Volllizenz animieren soll. In beiden Fällen liefert obige Funktion True. Gibt es eine Möglichkeit, die 'vorläufige' Version von einer Vollversion vom Programmcode aus zu unterscheiden? Gruß MHaitz |
AW: Prüfen, ob Excel installiert ist
|
AW: Prüfen, ob Excel installiert ist
In der Registry nachschauen.
In der Gegend von HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\ Common\ProductVersion solltest Du fündig werden. 11.0 kann auch was anderes sein, jenachdem, welches Office installiert ist. Dann liefert excel version delphi source bei meiner Suchmaschine u. a. dieses: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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