[Форум] [Помощь] [Поиск] [Выйти] |
Добро пожаловать, ![]() |
|
|
| ||
Суть проблемы: создаю в делфи эксельэппликейшн Excel := CreateOleObject('Excel.Application'); , работаю с ним минут 10, например. В это время на машине запускается эксель, какая-нить книга2, и Эксель свою книгу2 цепляет в моё эксельэппликейшн, соответственно по закрытию книги2 закрываются все мои книги. Я этого не хочу. Единственным выходом стало: Excel.Interactive := False; Но тогда работать с книга2 и вообще с экселем в эти 10 минут невозможно. А вдруг пользователь захочет? Поиски решения в инете продолжаются, может тут кто подскажет? |
| ||
У меня таких проблем не было: я в одном екселе контроллировал, а другой подключался программой и вообще видим не был.. Физически таск менеджер показывал 2 процесса excel.exe Дома погляжу исходники, если найду... |
| ||
Сам-то я создаю новый процесс, то что до меня было запущено - фунциклирует. Но как этот процесс прихватизировать, чтобы никто не подключался к нему - непонятно. |
| ||
а можно поинтересоваться для чего сие (имеется ввиду для чего пускать excel из delphi)? действительно интересно. |
| ||
Я в свое время использовал для того, чтобы складывать результаты работы программы :) Текстовый файл был неудобен, так как я цветами расцвечивал там чего-то :) А еще использовал для другой программы потому, что исходные данные были присланы в екселе (и присылались еще и еще) ;) |
| ||
Да, действительно, я делал так: MEl:= CreateOleObject('Excel.Application'); MEl.Workbooks.Open(OD.FileName); MEl.Visible:=False; И действительно, моя прога не трогала того, что было запущено до нее. После - не помню, а проверить не могу - давно уж дельфи не использую. Есть подозрение, что при запуске Excel сначала пытается сделать GetActiveOleObject, и уж в случае неудачи - CreateOleObject. Это чтобы не засорять процессами систему. Видимо, твоя задача либо обеспечить неудачу при взятии твоего процесса (может события есть какие-нибудь, оповещающие об этом), либо изолировать его, либо сделать так, чтобы процесс не закрывался при закрытии другого окна :) P.S. Можно попробовать в C#.. не думаю, что есть фундаментальные отличия :) |
| ||
А может еще подскажете как его закрыть нормально а то он так и остается висеть и еще раз не запуститься:( |
| ||
procedure TForm1.FormCreate(Sender: TObject); begin Form1.ExcelApplication1.Connect; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Form1.ExcelApplication1.Quit; end; А на закладке Servers есть хорошая компонента ExcelApplication. А еще на сайт королевство Делфи сходи )))))) |
| ||
:) Ексель радосно остается висеть в списке процессов:) а про Апликатион нигде ничего не написано я в Билдере |
| ||
Работаю с Exel'ом : void __fastcall TForm7::BitBtn4Click(TObject *Sender) { ExcelApplication1->Connect(); ExcelApplication1->Visible[0] = false; TVariantInParam p; p =EmptyParam; long lcid=LOCALE_USER_DEFAULT ; ExcelApplication1->Workbooks->OpenText( WideString(ExtractFilePath(Application->ExeName) + \adres_report.txt), xlWindows, 1, xlDelimited, xlDoubleQuote, false, false, false, true, false, false, p, p, p, lcid); ExcelWorksheet1->ConnectTo(ExcelApplication1->ActiveSheet); ExcelWorksheet1->Cells->Select(); ExcelWorksheet1->Columns->AutoFit(); ExcelApplication1->Visible[0] = true; } При закрытии формы: void __fastcall TForm7::FormClose(TObject *Sender, TCloseAction &Action) { ExcelWorksheet1->Disconnect(); ExcelApplication1->Quit(); ExcelApplication1->Disconnect(); } Проблема в том, что когда я закрываю Exel и выхожу из своей программы, Exel все равно остается в памяти! После этого при повторном выполнении программы Exel уже не показывается целиком, от него показывается только менюшка с кнопками! (C++ Builder 5, Office2000, WinXP Prof RUS) Я в инете порыл, Exel может не выгружаться даже при вызове его из The Bat и Auto CAD 2002 Borland просто отдыхает:-) |
| ||
эксперементально замечено что если вызвать Эксель сохранить файло закрыть эксель и дать ему секунд 5 отвисеться - он пропадает. Не делая при этом ExcelApplication1->Visible[0] = true; потом можно открывать полученный файл ShellExecute - тогда работает повторная и многократная передача (работает 9 из 10 раз;))) но все равно это не выход как мне кажется. |
| ||
Гугл? %) В догонку. О закрытии Excel. Чтобы он не остался висеть в 'Списке процессов' нужно не просто выполнить фукнцию Quit, но и присвоить переменной, указывающей на OLE-объект, значение Null. FExcelApp.Quit; FExcelApp := Null; (с) http://www.delphikingdom.ru/asp/articles_forum.asp?ArticleID=502 и так. http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=313 http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=249 http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=272 уж если это не поможет - придеться читать хелп и звонить в MS :) Случайно наткнулся. Почитая там все, вдруг поможет. |
| ||
СеряЖ ай умница дочка стало работать 19 из 20:) |