Ответ 1
Вы можете использовать код, основанный на подсказке Scalabium, чтобы проверить, доступен ли Excel. Или что-то вроде:
uses ComObj, ActiveX;
function IsObjectAvailable(const ClassName: string): Boolean;
var
ClassID: TCLSID;
begin
Result := Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)),
ClassID));
end;
Вы также можете проверить, работает ли Excel, используя следующий код:
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;