как узнать, установлен ли Excel на компьютере?
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
плз, код процедуры, т.к. вариант, который я нашел, у меня не работает. пишу на Delphi 7
1) Посмотреть соответсвующие ветки в реестре
2)
App : Variant;
try
app := CreateOleObject('Excel.Application');
App:=Unassigned;
showmessage('Ексель есть')
except
showmessage('Екселя нет')
end;
2)
App : Variant;
try
app := CreateOleObject('Excel.Application');
App:=Unassigned;
showmessage('Ексель есть')
except
showmessage('Екселя нет')
end;
есть более элегантное решение:
if not IsOLEObjectInstalled('Excel.Application') then
ShowMessage('Класс не зарегистрирован')
else
ShowMessage('Класс найден');
// А вот и сама функция IsOLEObjectInstalled.
// Кстати, можна проверять ею любой обьект поддерживающий ОЛЕ-автоматизацию (Ворд, и другие)
function IsOLEObjectInstalled(Name: String): boolean;
var
ClassID: TCLSID;
Rez : HRESULT;
begin
// Ищем CLSID OLE-объекта
Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID);
if Rez = S_OK then // Объект найден
Result := true
else
Result := false;
end;
if not IsOLEObjectInstalled('Excel.Application') then
ShowMessage('Класс не зарегистрирован')
else
ShowMessage('Класс найден');
// А вот и сама функция IsOLEObjectInstalled.
// Кстати, можна проверять ею любой обьект поддерживающий ОЛЕ-автоматизацию (Ворд, и другие)
function IsOLEObjectInstalled(Name: String): boolean;
var
ClassID: TCLSID;
Rez : HRESULT;
begin
// Ищем CLSID OLE-объекта
Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID);
if Rez = S_OK then // Объект найден
Result := true
else
Result := false;
end;
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
или в одну строку 
Result := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID) = S_OK;

Result := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID) = S_OK;
