Microsoft Excel reporting and 
 data analyzing with practically no coding. 
 .Net, ActiveX, and VCL versions. 
 www.AfalinaSoft.com

Главная    Продукты    Downloads    Поддержка    Регистрация    Delphi & Excel

[ English ]

MS Office COM Add-ins. Excel reports with minimal coding. Save your time. Get impressive results. VCL & OCX. Microsoft Excel reporting 
 and data analyzing

Delphi & Excel


Продукты



Delphi & Microsoft Excel - Excel.Application.

Закрытие Excel


Испольуя раннее связывание

if Assigned(IExcel) then begin
if (IExcel.Workbooks.Count > 0) and (not IExcel.Visible[xlLCID]) then
// не закрывайте не свои книги
begin
IExcel.WindowState[xlLCID] := TOLEEnum(Excel8_TLB.xlMinimized);
IExcel.Visible[xlLCID] := true;
Application.BringToFront;
end
else
IExcel.Quit;
IExcel := nil; // см. Хорошая практика
end;

Зачем столько кода? Зачем столько кода? Вы не запускали новый процесс, вы "законнектились" к уже существовавшему. В нем была открыта книга. Если оставить только присваивание в nil, то существовавший процесс не будет выгружен (он же существовал до запуска вашего приложения), но будет, возможно, спрятан от пользователя с его открытой книгой.

Используя компоненты Delphi 5

if Assigned(Excel) then begin
if (Excel.Workbooks.Count > 0) and (not Excel.Visible[xlLCID]) then
// не закрывайте не свои книги
begin
Excel.WindowState[xlLCID] := TOLEEnum(Excel97.xlMinimized);
Excel.Visible[xlLCID] := true;
Application.BringToFront;
end
else
Excel.Quit;
FreeAndNil(Excel);
end;

В Delphi 5 вы работаете уже не с интерфейсом напрямую, а с экземпляром класса TExcelApplcation. Это настоящий экземпляр класса, освободить который просто необходимо. Поэтому вместо присваивания в nil - FreeAndNil.

Используя позднее связывание

if not VarIsEmpty(Excel) then begin
if (Excel.Workbooks.Count > 0) and (not Excel.Visible) then
// не закрывайте не свои книги
begin
Excel.WindowState := Excel97.xlMinimized;
Excel.Visible := true;
Application.BringToFront;
end
else
Excel.Quit;
Excel := UnAssigned;
end;

Внимание - хорошая практика!
Процесс Excel останется в памяти, скрыто выполняясь, до тех пор, пока вы не освободите все ваши указатели на любые, использованные вами, интерфейсы Excel. Отсоедините все компоненты, присвойте всем интерфейсным переменным nil и установите все переменные типа variant в Unassigned, чтобы избежать этого.

Copyright © 1999-2003
Afalina Co., Ltd.
Все права защищены.

WebMaster