powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Окрытые приложения Excell
39 сообщений из 39, показаны все 2 страниц
Окрытые приложения Excell
    #33326523
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BCB 6.0 Задача следующая: получать данные из Excell.
Но вот прблема...
Есть несколько окрытых приложений Excell из ОФИСА 2003.
Как получить именно открытое сейчас (активное) приложение Excell (не путаем с книгами или листами в одном приложении) а не то, которое было открытым первым.
Или как получить список этих приложений для далнейшего присвоения к Аpp

Пользуюусь этим:

try
{ Variant App=Variant::GetActiveObject("Excel.Application"); }
catch(...) {;}

Помогите!
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33326679
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложение всегда одно.
________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33327109
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Lelikk]Приложение всегда одно.
/quot]

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


В условии есть несколько окрытых приложений Excell...
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33328943
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас LelikkПриложение всегда одноэто ты здорово придумал
Это не он придумал. Это Микрософт придумал :)
Эксели некоторых версий пытаются вместо запуска новой копии приложения сделать новую рабочую книгу внутри уже запущенного приложения. Но это поведение различается в разных версиях, видимо Микрософты сами не решили что лучше :)
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33329469
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чушь не надо нести. Количество открытых приложений Excell напрямыю зависит от того КАК их открывать
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330024
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Чушь не надо нести. Количество открытых приложений Excell напрямыю зависит от того КАК их открывать

да понятно все это. но что делать если есть несколько окрытых приложений Excell?
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330067
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда открываешь его запоминай в Variant, Получил лист - запомнил его.
В этом случае тебя мало волнует какой жизнью живет Excell. Разьве-что его насильственно закроют :)
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330138
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Когда открываешь его запоминай в Variant, Получил лист - запомнил его.
В этом случае тебя мало волнует какой жизнью живет Excell. Разьве-что его насильственно закроют :)

Тоже вариант, но это прийдется присать какой - то сервис который отслеживает "поведение екселя в системе", а этого делать совсем не хочется... Проще сказать: надо получить список уже открытых екселей при запуске своего приложения. Может средствами самого Бейсика в экселе можно это сделать, чтобы получить ссылку на необходимй Excel.Application? Но что-то я этого найти не могу...
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330165
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну нафига тебе за ним следить ??? Ты работаешь со своим листом и ниипет
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330232
Tov. Drujba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klyapinBCB 6.0 Задача следующая: получать данные из Excell.
Но вот прблема...
Есть несколько окрытых приложений Excell из ОФИСА 2003.
Как получить именно открытое сейчас (активное) приложение Excell (не путаем с книгами или листами в одном приложении) а не то, которое было открытым первым.
Или как получить список этих приложений для далнейшего присвоения к Аpp

Пользуюусь этим:

try
{ Variant App=Variant::GetActiveObject("Excel.Application"); }
catch(...) {;}

Помогите!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  myExcel: Variant;
begin
  try
    myExcel := GetActiveOleObject('Excel.Application');
  except
    on EOLESysError do
      myExcel := CreateOleObject('Excel.Application');
  end;

Код для Дельфи, но думаю суть ясна :) Если необходимо именно активное приложение, то вот тебе щастье.
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330401
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tov. Drujba Код для Дельфи, но думаю суть ясна :) Если необходимо именно активное приложение, то вот тебе щастье.
Если Вы не заметили. то я написал то-же самое
(
выглядит оно так

try
{ Variant App=Variant::GetActiveObject("Excel.Application"); }
catch(...)
{
try { App=Variant::CreateObject("Excel.Application"); } catch (...) {;}
}

для билдера, но счастья нет...
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330415
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Ну нафига тебе за ним следить ??? Ты работаешь со своим листом и ниипет

Да нет у меня проблем с листами и книгам
есть проблема с приложениями! Приложений ексель несколько...
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330453
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты СМОЖЕШЬ различить эти приложения как пользователь, можешь также разчить их программно :) Если нет - то чего тебе об этом беспокоится ???

Скажи Оммммм и подыши
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330526
Tov. Drujba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klyapin Tov. Drujba Код для Дельфи, но думаю суть ясна :) Если необходимо именно активное приложение, то вот тебе щастье.
Если Вы не заметили. то я написал то-же самое
(
выглядит оно так

try
{ Variant App=Variant::GetActiveObject("Excel.Application"); }
catch(...)
{
try { App=Variant::CreateObject("Excel.Application"); } catch (...) {;}
}

для билдера, но счастья нет...

Хм, у меня работало. А Ваш код не посмотрел. Извиняюсь.
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330527
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Если ты СМОЖЕШЬ различить эти приложения как пользователь, можешь также разчить их программно :) Если нет - то чего тебе об этом беспокоится ???

Скажи Оммммм и подыши

в случае если приложений много код
{ Variant App=Variant::GetActiveObject("Excel.Application"); }
catch(...) {;}

возвращает ссылку на открытое первым приложение а не активное в настоящее время....

"Оммммм" + дышу....
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33330580
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Вы сделайте ему Quit и поищите другое

Продолжайте дышать ...
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33331419
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klyapin, почитай вот здесь: http://support.microsoft.com/default.aspx?scid=kb;en-us;288902
Там описано как раз то, что ты хочешь.
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33332151
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да не написано там чего он хочет. Он хочет по GetObject открывать не первый попавшийся Excell, а строго определенный. Причем как он его собирается строго определять он не говорит
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33332160
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, теперь узрел

Код: plaintext
GetObject("Book2").Application
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33332951
klyapin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)Да не написано там чего он хочет. Он хочет по GetObject открывать не первый попавшийся Excell, а строго определенный. Причем как он его собирается строго определять он не говорит

Я писал "Как получить именно открытое сейчас (активное) приложение Excell (не путаем с книгами или листами в одном приложении) а не то, которое было открытым первым. ".
Я думаю, что это достаточно строгое определение (в некотором приблежении :) ).

White Owlklyapin, почитай вот здесь: http://support.microsoft.com/default.aspx?scid=kb;en-us;288902
Там описано как раз то, что ты хочешь.

+

Gluk (Kazan)Ага, теперь узрел

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


огромное спасибо за ссылочку.
по моему вопросу там пишется следующее:

GetObject
GetObject is used to attach to a running instance of an automation server. There are a few different ways to call GetObject, but the syntax that is recommended for the Microsoft Office applications is as follows:
set xlApp = GetObject(, "Excel.Application")
If an instance of Microsoft Excel is running when this code is executed, you have access to the running instance's object model through the xlApp variable. If no instance is running, you receive the following trappable run-time error message:
Run-time error '429':
ActiveX component can't create object
If multiple instances of Microsoft Excel are running, GetObject attaches to the instance that is launched first. If you then close the first instance, another call to GetObject attaches to the second instance that was launched, and so forth.

You can attach to a specific instance if you know the name of an open document in that instance. For example, if an instance of Excel is running with an open workbook named Book2, the following code attaches successfully to that instance even if it is not the earliest instance that was launched: Set xlApp = GetObject("Book2").Application

В принципе меня это может устроить, однако есть еще вопрос как получить список workbоо-ков активных, (через список приложений в системе?) и что если есть несколько instance имеют одинаковые имена открытых workbook - ов?
Я понимаю, что данные вопросы довольно непоняты ведь в основном используют импорт в ексель, однако у меня стоит задача экспорта из нескольких книг которые могут быть запущены также из нескольких приложений. :(
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333015
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klyapinчто если есть несколько instance имеют одинаковые имена открытых workbookСлушай, успокойся, нельзя объять необъятное :) (С)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333241
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 klyapin

Обратись к разработчикам Excell :)
...
Рейтинг: 0 / 0
Окрытые приложения Excell
    #33333734
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
klyapinВ принципе меня это может устроить, однако есть еще вопрос как получить список workbоо-ков активных, (через список приложений в системе?) и что если есть несколько instance имеют одинаковые имена открытых workbook - ов?
Проще всего через функцию EnumWindows() получить список всех окон, выбрать из них те у которых заголовок начинается с "Microsoft Excel" Потом через FindWindowEx можешь составить список книг открытых в каждой из копий Экселя.
...
Рейтинг: 0 / 0
Окрытые приложения 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
39 сообщений из 39, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Окрытые приложения Excell
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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