Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.08.06;
Скачать: CL | DM;

Вниз

Excell как OLE Object   Найти похожие ветки 

 
harisma ©   (2012-11-12 17:21) [0]

Работаю с 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, если была нажата кнопка "Прервать", причем чтобы случайно не был "убит" чужой процесс.


 
Ega23 ©   (2012-11-12 17:49) [1]

if Нажата_кнопка_прервать then
begin
 Ex.Quit;
 Ex := null;
end;


 
harisma ©   (2012-11-12 18:06) [2]


> if Нажата_кнопка_прервать then
> begin
>  Ex.Quit;
>  Ex := null;
> end;

Так уже пробовал - не срабатывает :( Все равно остается в памяти процесс.
А если написать 2 раза quit (как советуют на одном из форумов), тогда ругается что так делать нельзя :(


 
Anatoly Podgoretsky ©   (2012-11-12 18:27) [3]

> harisma  (12.11.2012 18:06:02)  [2]

Ну так использую не Ole, а COM объект


 
harisma ©   (2012-11-12 18:32) [4]

Нашел решение :)!!!
Надо перед Ex.Quit еще выставить Ex.DisplayAlerts := False. Тогда все классно закрывается.



Страницы: 1 вся ветка

Текущий архив: 2017.08.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.004 c
1-1352726500
harisma
2012-11-12 17:21
2017.08.06
Excell как OLE Object


15-1464348284
ttUser
2016-05-27 14:24
2017.08.06
Что такое fb_lock_xxx в Process Explorer в загруженных DLL?


15-1449670082
Rouse_
2015-12-09 17:08
2017.08.06
Process Memory Map 1.0 alpha 4


2-1442083956
vegarulez
2015-09-12 21:52
2017.08.06
Как подружить scrollbar + scrollbox.


15-1461214250
KilkennyCat
2016-04-21 07:50
2017.08.06
А не планируется ли в начале июня встреча в Москве?