|
![]() |
#1 |
Участник
|
![]()
Добрый день.
Столкнулся с такой проблемой: Если открыт excel и в документе начать редактировать ячейку(провалиться в него). То в AXAPTA метод COM::getObject('Excel.Application') срабатывает не корректно. При вызови любого метода на COM (Excel.visible(false)) сразу падает в ошибку. Метод "visible" не поддерживается интерфейсом Automation COM-объекта класса "<неизвестно>". ![]() Кто сталкивался с такой проблемой? Как ее можно решить? AXAPTA 2009, офис 2007 |
|
![]() |
#2 |
Молодой, подающий надежды
|
Вывод через COM всегда был крайне не стабилен. Обычно тяжелые отчеты, использующие COM, надо запустить и не дышать. В прямом смысле, даже мышкой дергать не надо и это к сожалению не шутки
![]() Есть всякие воркэраунды, типа • переписывания логики работы с офисом на .Net (Взаимодействие с Excel через .NET (семейство классов SysExcel)) • или в отдельные потоки (Ошибка времени выполнения в ComExcelDocument_RU.findRange() ) • или вызов функций через COMDispFunction (Ошибка при вызове COM-метода ) См. так же Win2008 и вызов методов COM-объектов выбор того или иного метода зависит от задачи, сроков, бюджета и т.д. Последний раз редактировалось pedrozzz; 23.03.2015 в 16:39. |
|
|
За это сообщение автора поблагодарили: demianimp (1). |
![]() |
#3 |
Участник
|
не используйте COM
используйте .NET Microsoft уже давно говорит, что COM - deprecated |
|
|
За это сообщение автора поблагодарили: demianimp (0). |
![]() |
#4 |
Участник
|
Дело не в том, что COM - deprecated, а в том, что зачем-то в интеграцию через COM из интерфейсного потока клиента встроили таймауты для вызовов; .NET-обертки точно так же вызывают Excel через COM.
|
|
|
За это сообщение автора поблагодарили: demianimp (1). |
![]() |
#5 |
Участник
|
Всем спасибо.
Реализовал у себя такую заглушку, может кому пригодится. X++: //AX100765_fixCOMExcel_yada 24.03.2015 static COM getObject(str _className = 'Excel.Application') { COM excel; DialogButton returnButton; ; //Пытаемся получить COM объект excel = COM::getObject(_className); //Если COM объект получили и он заблокирован if(excel && excel.toString() == '') { //Выводим на экран диалоговое окно returnButton = box::okCancel('Ошибка при обращении к Excel.\n' + 'В данный момент происходит редактирование документа Excel и AXAPTA не может получить доступ.\n' + 'Прекратите редактирование документа и нажмите кнопку "ОК".', DialogButton::Cancel, 'Ошибка при обращении к Excel'); //Если пользователь нажал кнопку "OK" if(returnButton == DialogButton::Ok) { //Снова пытаемся получить доступ к COM объекту excel = ComExcel::getObject(_className); } else { //Возвращаем COM объект throw error('Операция отменена пользователем'); } } return excel; } |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|