Zitat von
RWarnecke:
warum gehst Du nicht über die Registry ?
Die Funktion CLSIDFromProgID() geht auch über die Registry.
Allerdings ist die Registry eine Abstraktionsebene tiefer.
Es ist softwaretechnisch eine Ungeschicktheit eine tiefere Abstraktionsebene als nötig zu wählen.
Man möchte ja nicht wissen, was in der Registry steht, sondern welche
COM-Klassen zur Verfügung stehen.
Delphi-Quellcode:
function ClassIDExists(classID:WideString):Boolean;
var
tmp : TGUID;
begin
Result := Succeeded(CLSIDFromProgID(PWideChar(classID), tmp));
end;
function GibExcelVersion : TExcelVersion;
begin
// zuerst prüfen, ob Excel 2007 vorhanden - Reihenfolge ist wichtig
if ClassIDExists('Excel.Application.12') then
Result := ev2007;
else if ClassIDExists('Excel.Application.11') then
Result := ev2003
else
Result := evKeine;
end;