Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.09.2021, 07:25
Vansha Vansha вне форума
Прохожий
 
Регистрация: 18.01.2018
Сообщения: 30
Версия Delphi: 7, XE5
Репутация: 10
По умолчанию Зависание Excel в процессах

Подскажите рабочий метод как убить процесс при формировании, сохранении Excel.
Перепробовал все что можно, но на 5 - 10 раз все равно Excel зависает и висит в диспетчере задач.

Код:
procedure TForm6.BitBtn6Click(Sender: TObject);
var
 exApp: Variant;
 ExcelApp: OLEVariant;
begin


 exApp:= CreateOleObject('Excel.Application');
 exApp.WorkBooks.Open('C:\test\131у_1.xls');


 exApp.Worksheets.Item['Лист1'].Range['AA16']:= Edit1.Text;

 exApp.Worksheets.Item['Лист1'].Range['Z19']:= Edit2.Text;

 exApp.Worksheets.Item['Лист1'].Range['Y18']:= Edit3.Text;

 exApp.Worksheets.Item['Лист1'].Range['Z21']:= Edit4.Text;

 exApp.Worksheets.Item['Лист1'].Range['AC19']:= ComboBox2.Text;

 exApp.Worksheets.Item['Лист1'].Range['Z20']:= ComboBox3.Text;

 exApp.Worksheets.Item['Лист1'].Range['Z26']:= ComboBox4.Text;

 exApp.Worksheets.Item['Лист1'].Range['AA25']:= ComboBox5.Text;

 exApp.Worksheets.Item['Лист1'].Range['AI27']:= ComboBox6.Text;

 exApp.Worksheets.Item['Лист1'].Range['Y13']:= ComboBox7.Text;

 exApp.Worksheets.Item['Лист1'].Range['Z14']:= DateTimePicker1.Date;

 exApp.Application.Quit;

Последний раз редактировалось Admin, 01.09.2021 в 19:01.
Ответить с цитированием
  #2  
Старый 03.09.2021, 05:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,993
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

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

Вообще, лучше всего всегда запрашивать существующий объект, и только если его нет, то тогда создавать новый. Тогда в худшем случае у тебя останется один процесс висеть. В принципе, это уже не страшно. Либо сам сдохнет со временем, ну либо будет убит системой при выключении.
Ответить с цитированием
  #3  
Старый 22.09.2021, 02:20
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Надо после закрытия документа выполнить:
Код:
exApp := Unassigned;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter