![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Excell как OLE Object
harisma © (2012-11-12 17:21:00)Работаю с Excell как с OLE Object. Создаю его так:
var
ex, wb, ws, sb: oleVariant;
begin
Ex := CreateOleObject('Excel.Application');
SB := Ex.DisplayStatusBar;
Ex.Interactive := False;
Ex.ScreenUpdating := False;
Ex.DisplayStatusBar := False;
WB := Ex.Workbooks.Add(-4167);
WS := WB.WorkSheets[1];
........
Далее идет заполнение сетки листа данными, включая форматирование, формулы, данные и т. д.
То есть, в цикле бегается по исходным данным, также оформленным в виде сетки, и заполняется страница книги в Excell.
Сам процесс сбрасывания данных отображается на прогрессбаре в программе.
Приложение Excell запущено в фоновом режиме. Когда все данные сброшены, только тогда делаем Excell видимым пользователю.
Вот финальная часть кода:
Ex.Visible := True; // Только теперь делаем приложение видимым
Ex.Interactive := True;
Ex.ScreenUpdating := True;
Ex.DisplayStatusBar := SB;
И все бы тут хорошо, но на форме с прогресссбаром есть кнопка "Прервать". При нажатии на нее сброс данных в книгу Excell прекращается, но само приложение так и остается запущеным в фоновом режиме (это видно в диспетчере задач).
Поэтому вопрос: как программно "убить" именно этот процесс Excell, если была нажата кнопка "Прервать", причем чтобы случайно не был "убит" чужой процесс.
harisma (2012-11-12 18:32:00) [1]Нашел решение :)!!!
Надо перед Ex.Quit еще выставить Ex.DisplayAlerts := False. Тогда все классно закрывается.
Anatoly Podgoretsky (2012-11-12 18:27:00) [2]> harisma (12.11.2012 18:06:02) [2]
Ну так использую не Ole, а COM объект
harisma (2012-11-12 18:06:00) [3]
> if Нажата_кнопка_прервать then
> begin
> Ex.Quit;
> Ex := null;
> end;
Так уже пробовал - не срабатывает :( Все равно остается в памяти процесс.
А если написать 2 раза quit (как советуют на одном из форумов), тогда ругается что так делать нельзя :(
Ega23 (2012-11-12 17:49:00) [4]
if Нажата_кнопка_прервать then
begin
Ex.Quit;
Ex := null;
end;