powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Окрытые приложения Excell
14 сообщений из 39, страница 2 из 2
Окрытые приложения Excell
    #33333764
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потом еще вспомнить, что эксел не выгружается сам, если рабтающая с ним по ОЛЕ прога вылетела некорректно .... и сидит в процессах, а окна ни одного нет ......
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333791
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, как оно может вылететь корректно ? Надо над этим подумать ....
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333796
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасА потом еще вспомнить, что эксел не выгружается сам, если рабтающая с ним по ОЛЕ прога вылетела некорректно .... и сидит в процессах, а окна ни одного нет ......


да. есть такое дело. боролся и с этим.
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333801
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как ? Если не секрет ... их ведь не отличить от нормальных экземпляров ...
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333816
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у них тогда будет Application.Visible = False.
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333945
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасА как ? Если не секрет ... их ведь не отличить от нормальных экземпляров ...


раньше старался недопускать вылета по оле. :)

еще есть такое мнение (надеюсь меня простит автор не помню где взял):


"Иногда после вызова стандартного метода по закрытию Excel, все рабочии книги, да и само приложение Excel закрывается, но сам процесс excel.exe остается висеть в памяти. Это отлично видно в Task Manager'е в WinNT/2000/XP.
Такое происходит при работе с Excel как через OLE, так и с использованием серверных компонентов со вкладки Servers в палитре компонент.
Какой либо закономерности в этом я не улавил. Просто при открытии/закрытие одного файла (рабочей книги Excel; .xls) все завершается удачно, а при открытие/закрытие другого файла процесс excel.exe остается висеть в памяти.
Возможно данный баг привнесен локализаторами Windows и Office, а может быть этто очередные баги Borland... В любом случае я не нашел другого способа с этим бороться кроме как убивать процесс вручную:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
Variant excel = Unassigned; 
HWND hExcelWindow = NULL; 
bool __fastcall KillProcess(DWORD PID); 
bool __fastcall GetExcelPid(HWND hExWindow, LPDWORD pPid); 


//открываем нужную книгу, использую OpenDialog 
void __fastcall TMainForm::ButtonOpenExcelClick(TObject *Sender) 
{ 
  if (!OpenDialog->Execute()) return; 
  try 
  { 
    if (!VarIsEmpty(excel)) 
    { excel.OleProcedure("Quit"); excel = Unassigned; } 
    excel=CreateOleObject("Excel.Application"); 
    excel.OlePropertySet("Visible", true); 
    excel.OlePropertyGet("Workbooks").OlePropertyGet("Open",OpenDialog->FileName) 
    .OlePropertyGet("Worksheets").OlePropertyGet("Item", 1 ).OleProcedure("Activate"); 
// далее получаем Caption открытого окна Excel, затем с его помощью находим и 
// запоминаем хендл окна. В дальнейщем с его помощью мы определим PID процесса 
// excel.exe, запущеного именно нами! 
// Зачем нам завершать чужие процессы? 
String ExcelCaption = excel.OlePropertyGet("Caption"); hExcelWindow = FindWindow("XLMAIN", ExcelCaption.c_str()); } catch (Exception &exception) { Application->ShowException(&exception); } } // Функция закрытия Excel void __fastcall TMainForm::ButtonCloseExcelClick(TObject *Sender) { // Проверяем был ли открыт Excel if (VarIsEmpty(excel)) return; // Выходим из Excel excel.OleProcedure("Quit"); excel = Unassigned; //Убиваем процесс excel.exe, если он еще весит в памяти DWORD Pid; if (GetExcelPid(hExcelWindow, &Pid)) if (!KillProcess(Pid)) Application->MessageBox("Error to close Excel.\n\ May be you have not debug privilege.", "MyProg", MB_OK + MB_ICONERROR); hExcelWindow = NULL; } // Получаем PID процесса excel.exe bool __fastcall GetExcelPid(HWND hExWindow, LPDWORD pPid) { // используем нащ хендл окна, полученый в самом начале при отрытие книги Excel if (!hExWindow) return false; char ClassName[ 100 ]; // Получаем PID нашего процесса if (!GetWindowThreadProcessId(hExWindow, pPid)) return false; // На всякий случай проверяем является ли он действительно Excel, для этого // проверям класс процесса, он должен быть "XLMAIN" (получено экспериментальным путем) if (GetClassName(hExWindow, ClassName, 99 ) == 0 ) return false; if (CompareStr("XLMAIN", ClassName) != 0 ) return false; return true; } // Функция для закрытия любого процесса по его PID'у bool __fastcall KillProcess(DWORD PID) { bool ReturnCode = false; HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, false, PID); if (hProcess != NULL || hProcess != INVALID_HANDLE_VALUE) { if (TerminateProcess(hProcess, - 1 )) ReturnCode = true; CloseHandle( hProcess ); } return ReturnCode;
"
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333981
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klyapinеще есть такое мнение (надеюсь меня простит автор не помню где взял):

"Иногда после вызова стандартного метода по закрытию Excel, все рабочии книги, да и само приложение Excel закрывается, но сам процесс excel.exe остается висеть в памяти. Это отлично видно в Task Manager'е в WinNT/2000/XP.
Я ж уже говорил, это сознательно сделаная микрософтами пакость. Где-то в msdn есть статья на эту тему. Вот только не могу сейчас ее найти :)
Оно появилось начиная с Excel'2000.
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33336196
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Ага, теперь узрел

Код: plaintext
GetObject("Book2").Application


Народ, а не подскжете как это в билдере выглядит?
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33336393
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почти также, с поправкой на сишный синтаксис
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33337945
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасПочти также, с поправкой на сишный синтаксис
Posted via ActualForum NNTP Server 1.3

Извините, а можно меня тыкнуть мордой в код:)
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33338013
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, так же не канает ..... пока что ...
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33341412
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасХм, так же не канает ..... пока что ...

отож. и сам найти ничего не могу... :(
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Окрытые приложения Excell
    #34808921
XTEAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была у меня такая проблемка. Писал я скрипт на VBS. Я тогда создал обьект-ссылку на лист и не уничтожал его. И эксель не закрывался, пока все ссылки на него не будут уничтожены. Как только уничтожил, сразу закрылся.
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #34809893
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xteamБыла у меня такая проблемка. Писал я скрипт на VBS. Я тогда создал обьект-ссылку на лист и не уничтожал его. И эксель не закрывался, пока все ссылки на него не будут уничтожены. Как только уничтожил, сразу закрылся.

Друк, ты на дату смотрел ???
А твоя проблема называется подсчетом ссылок (активно используется в технологии COM)
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Окрытые приложения Excell
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]