Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как корректно закрыть Excel 
:(
    Опции темы
Akella
Дата 24.2.2004, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



использую WinXP, ExcelXP, D7

На дополнительной модальной форме лежит компонена TExcelApplication со страницы Servers
Автоподключение и автовыход отключены (False)

Uses System, ...., ExcelXP;
также объявлены глобальные переменные

WorkBook: _WorkBook;
Sheet: _WorkSheet;


В нажатия кнопки коде пишу:
...
Excel.Connect;
Excel.WorkBooks.Open(параметры, имя файла);

выполняю какие-то действия
...
...
...

Excel.DisConnect;//это не помогает
Excel.Quit;//это тоже не помогает

и то и другое вместе тоже не помогает

Открываю диспетчер задач - висит Excel, исчезает только после закрытия основного окна, т.е. выхода из программы.

Использовать CreetOleObject не хочется, т.к. много переделывать, а уже все работает идеально кроме закрытия Excel`я

весь код я уже выкладывал.
PM MAIL   Вверх
Cashey
Дата 24.2.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Выгрузи переменные WorkBook и Sheet из памяти.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Albinos
Дата 24.2.2004, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 11.10.2003

Репутация: 1
Всего: 3



А чего нибудь типа Close() там нет?
PM MAIL   Вверх
Georg4
Дата 25.2.2004, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: 0
Всего: 10



Отличный вопросsmile.gifsmile.gifsmile.gif
Нет не пугайтесь, кто бы то ни был, я не буду опять вбухивать суда всю мануала по ЕХЕЛУ, я действительно задолбался это делать, так что:
Закрытие 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, чтобы избежать этого.

Вот и все!


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Kesh
Дата 25.2.2004, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 4
Всего: 54



Georg4 Ты бы весь цикл статей привел... Ибо это есть гуд...
По-моему "По волнам интеграции..."


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Cashey
Дата 25.2.2004, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Georg4, все твои рекоммендации сводятся к одному Quit и выгрузка из памяти , что я и говорил.

По поводу статей, я и сам бы мог поделиться не малым опытом работы с екселем, но для етого хорошо было бы создать отдельный форум, что бы добро не пропало smile.gif, а главное для того, что бы этим могли воспользоваться и те кто работает с другими языками и бывает на других форумах.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.