![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 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`я весь код я уже выкладывал. |
|||
|
||||
Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Выгрузи переменные WorkBook и Sheet из памяти.
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
Albinos |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 11.10.2003 Репутация: 1 Всего: 3 |
А чего нибудь типа Close() там нет?
|
|||
|
||||
Georg4 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 961 Регистрация: 2.11.2002 Репутация: 0 Всего: 10 |
Отличный вопрос
![]() ![]() ![]() Нет не пугайтесь, кто бы то ни был, я не буду опять вбухивать суда всю мануала по ЕХЕЛУ, я действительно задолбался это делать, так что: Закрытие 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, чтобы избежать этого. Вот и все! -------------------- Никто и никогда не должен решать одну проблему дважды |
|||
|
||||
Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
Georg4 Ты бы весь цикл статей привел... Ибо это есть гуд...
По-моему "По волнам интеграции..." -------------------- ![]() |
|||
|
||||
Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Georg4, все твои рекоммендации сводятся к одному Quit и выгрузка из памяти , что я и говорил.
По поводу статей, я и сам бы мог поделиться не малым опытом работы с екселем, но для етого хорошо было бы создать отдельный форум, что бы добро не пропало ![]() -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |