05.04.2012, 08:29 | #1 |
Enjoy!
|
Убить процесс Excel
Привет коллеги!
Массовая печать Excel. Использую класс ComExcelDocument_RU. Отправляю сразу на печать без вывода в Excel через printOut(). После печати остаются висящие процессы. Не получается убить. finalize() - не помогает. Похожие темы читал, не нашел где бы окончательно это решили. Знаю через cmd можно убивать процессы так. К слову. через процесс id: kill /PID <номер процесса> через имя образа: taskkill /IM excel* Спасибо. |
|
05.04.2012, 08:43 | #2 |
Участник
|
Метод closeDocument() пробовали вызвать?
Плюс можно глянуть здесь.
__________________
С уважением, Александр. |
|
05.04.2012, 08:46 | #3 |
Enjoy!
|
Цитата:
Сообщение от samolalex
Метод closeDocument() пробовали вызвать?
Плюс можно глянуть здесь. |
|
05.04.2012, 08:48 | #4 |
Участник
|
|
|
05.04.2012, 08:57 | #5 |
Участник
|
И ещё подумалось у вас excel при выходе точно не выводит никаких диалогов вроде "Сохранить изменения в файле?" Понятно что отчёт формируется в фоне, т.е. с visible(false), но если временно для тестирования напечатать один документ с отображением его на экране, не выскочит ли при попытке его закрытия подобный диалог? Не может ли это является причиной "подвисания" процесса Excel?
|
|
|
За это сообщение автора поблагодарили: iCloud (2). |
05.04.2012, 09:38 | #6 |
Enjoy!
|
Цитата:
Сообщение от S.Kuskov
И ещё подумалось у вас excel при выходе точно не выводит никаких диалогов вроде "Сохранить изменения в файле?" Понятно что отчёт формируется в фоне, т.е. с visible(false), но если временно для тестирования напечатать один документ с отображением его на экране, не выскочит ли при попытке его закрытия подобный диалог? Не может ли это является причиной "подвисания" процесса Excel?
Возможно ли избавиться от этого окна как-либо, хотя не факт что оно может влиять? Офис 2007, АХ2009. |
|
05.04.2012, 09:49 | #7 |
Участник
|
Нашел старый код, там отчет создавался посредством класса COM (без участия Аксаптовских классов):
X++: try { excelApplication = new COM("excel.application"); excelApplication.SheetsInNewWorkBook(1); excelWorkBooks = excelApplication.Workbooks(); excelWorkBook = excelWorkBooks.add(); excelWorkSheet = excelWorkBook.ActiveSheet(); cells = excelWorksheet.Cells(); pageSetup = excelWorkSheet.PageSetup(); pageSetup.Orientation(2); //Header --> this.CreateHeader(); //Header <-- //FillBody --> this.FillDocument(); //FillBody <-- excelApplication.visible(true); } catch(exception::Error) { if(excelApplication) { excelApplication.displayAlerts(false); excelWorkBooks.close(); excelApplication.quit(); } } Хотя по идее excelApplication.quit() отрабатывается в методе класса COMOfficeDocument_RU.quitApplication - класс, от которого наследуется COMExcelDocument_RU. А вы, кстати, пробовали вызывать метод quitApplication()?
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 05.04.2012 в 09:59. |
|
|
За это сообщение автора поблагодарили: iCloud (2). |
05.04.2012, 09:59 | #8 |
Участник
|
процесс завершает excel.quitApplication(true); (true - закрыть процесс без сохранения документа)
|
|
|
За это сообщение автора поблагодарили: iCloud (2). |
05.04.2012, 10:20 | #9 |
Enjoy!
|
Цитата:
quitApplication() пробовал но без параметра. quitApplication(false) при visible(false) после каждой фактуры спрашивает, сохранить ли документ? |
|
05.04.2012, 10:28 | #10 |
Enjoy!
|
Передав true в quitApplication() после printOut() всё получилось - процесс убивается! Хотя я не прослеживаю логики. Сохранить-да. А куда\чего.
to S.Kuskov Вы были правы, фишка "подвисания" процесса связана с вылетающим окошком при закрытии Excel. to samolalex Спасибо за мысли. |
|
05.04.2012, 10:38 | #11 |
Enjoy!
|
Нашел в методе:
True if the specified document or template hasn't been changed since it was last saved. // False if office application displays a prompt to save changes when the document is closed. Ну это всё объясняет. Спасибо всем. |
|
Теги |
excel |
|
|