FAQ VCL
Работа с MS Office\Общие вопросы

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как опpеделить, установлен ли какой либо компонент MS Office?

// Способ первый
uses
  {...,} ActiveX;

function CheckInstall( Obj: WideString ): boolean;
var
  ClassID: TCLSID;
  Rez: HRESULT;
begin
   // Ищем CLSID OLE-объекта
   Rez := CLSIDFromProgID( PWideChar( Obj ), ClassID );
   Result := Rez = S_OK;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if CheckInstall( 'Excel.Application' ) then
      ShowMessage( 'Excel установлен' );
   if CheckInstall( 'Word.Application' ) then
      ShowMessage( 'Word установлен' );
   if CheckInstall( 'Access.Application' ) then
      ShowMessage( 'Access установлен' );
end;

// Способ второй
uses
  {...,} Registry;

function CheckInstall( Obj: WideString ): boolean;
var
  Reg: TRegistry;
begin
   Reg := TRegistry.Create;
   try
      Reg.RootKey := HKEY_CLASSES_ROOT;
      Result := Reg.KeyExists( Obj );
   finally
      Reg.Free;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if CheckInstall( 'Word.Application' ) then
      ShowMessage( 'Word установлен' );
end;


Как опpеделить, запущен ли какой либо компонент MS Office?

uses
  {...,} ComObj;

function CheckRun( Obj: WideString ): boolean;
begin
   try
      GetActiveOleObject( Obj );
      Result := true;
   except
      Result := false;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if CheckRun( 'Word.Application' ) then
      ShowMessage( 'Word запущен' );
end;


Как опpеделить версию MS Office?

uses
  {...,} ComObj, RegularExpressions;

var
  E: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);
begin
   try
      E := CreateOleObject('Excel.Application'); // 'Word.Application'

      try
         case StrToInt(TRegEx.Match(E.Version, '^(\d+)').Value) of
             9: ShowMessage('Microsoft Office 2000');
            10: ShowMessage('Microsoft Office XP');
            11: ShowMessage('Microsoft Office 2003');
            12: ShowMessage('Microsoft Office 2007');
            14: ShowMessage('Microsoft Office 2010');
            15: ShowMessage('Microsoft Office 2013');
            16: ShowMessage('Microsoft Office 2016');
            else
               ShowMessage('Не удалось определить версию Office');
         end;
      except
         on E: Exception do
            ShowMessage('Не удалось определить версию Office: ' + E.Message);
      end;

   finally
      E.Quit;
      E := Unassigned;
   end;
end;

При использовании материала - ссылка на сайт обязательна