AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.08.2011, 11:04   #1  
Batuev Artem is offline
Batuev Artem
Участник
 
5 / 10 (1) +
Регистрация: 10.03.2009
проблема использования Excel через clr
Доброго времени суток!
Возникла проблема вызова объектов Excel, используя объекты clr.
Пример кода был взят из ветки форума. Ссылка.
И написан джобик (просто открываем, а затем пересохраняем файл):
X++:
static void test_clr_excel(Args _args)
{
    Microsoft.Office.Interop.Excel._Application         excel;
    Microsoft.Office.Interop.Excel.Workbooks            workbooks;
    Microsoft.Office.Interop.Excel._Workbook            workbook;
    System.Type                                         type;
    System.Reflection.FieldInfo                         fieldInfo;
    System.Object                                       missing;
    Microsoft.Office.Interop.Excel.XlFileFormat         fileFormat;
    Microsoft.Office.Interop.Excel.XlSaveAsAccessMode   saveAsAccessMode;
    FileName                                            textFileName;
    FileName                                            path;
    FileName                                            name;
    FileName                                            extention;
    FileName _excelFileName = "С:\\test.xls";
    ;
    new InteropPermission(InteropKind::ClrInterop).assert();

    [path, name, extention] = fileNameSplit(_excelFileName);
    textFileName = path + name + '.csv';

    if (System.IO.File::Exists(textFileName))
        System.IO.File::Delete(textFileName);

    type             = System.Type::GetType('System.Reflection.Missing');
    fieldInfo        = type.GetField('Value');
    missing          = fieldInfo.GetValue(null);
    fileFormat       = ClrInterop::parseClrEnum('Microsoft.Office.Interop.Excel.XlFileFormat', 'xlTextWindows');
    saveAsAccessMode = ClrInterop::parseClrEnum('Microsoft.Office.Interop.Excel.XlSaveAsAccessMode', 'xlNoChange');

    try
    {
        excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
        workbooks = excel.get_Workbooks();

        // при попытке открыть файл объект Excel просто вылетает
        workbook = workbooks._Open(_excelFileName, missing, missing, missing, missing, missing, missing, missing,
                                   missing, missing, missing, missing, missing);
        workbook.SaveAs(textFileName, fileFormat, missing, missing, missing, missing, saveAsAccessMode, missing, missing,
                        missing, missing, missing);
    }
    catch
    {
        info("catched");
    }
    
    try
    {
        // также не удаётся закрыть объект
        workbooks.Close();
    }
    catch
    {
        info("excel wasnt closed");
    }
    
    CodeAccessPermission::revertAssert();
}
При попытке открыть файл, Excel просто вылетает, не возвращая никакой ошибки. Тем не менее сам процесс остается висеть в менеджере задач.
Система: Win Srv 2008 R2, DAX 2009, Excel 2010
Возможно кто-то уже сталкивался с аналогичной проблемой. Возможно, что будет необходимо "подкрутить" какие-либо настройки системы.
Старый 22.08.2011, 14:52   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Сразу после создания экземпляра Excel в целях тестирования сделайте его видимым

X++:
    excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
    excel.set_Visible(true);

Как правило, проблема в сообщении об ошибке в Excel, которое требует нажать "Ok" для продолжения процесса открытия файла. Визуализация экземпляра Excel поможет убедится в правильности данного предположения
Старый 22.08.2011, 15:12   #3  
Batuev Artem is offline
Batuev Artem
Участник
 
5 / 10 (1) +
Регистрация: 10.03.2009
Добавил, но результата так и не получил. Соответственно стало:
X++:
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.set_Visible(true);                // отображается Excel
workbooks = excel.get_Workbooks();

// при попытке открыть файл объект Excel просто вылетает
workbook = workbooks._Open(_excelFileName, missing, missing, missing, missing, missing, missing, missing,
                                             missing, missing, missing, missing, missing);
Далее, при выполнении кода, открывается пустой Excel, без книги и без модальных окон. Затем, как и раньше Excel просто вылетает.
Старый 22.08.2011, 15:35   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Так что происходит с Excel? Он "вылетает" или "остается висеть"? По шагам тестировать не пробовали?
Старый 22.08.2011, 16:11   #5  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от Batuev Artem Посмотреть сообщение
Доброго времени суток!
Возникла проблема вызова объектов Excel, используя объекты clr.
Пример кода был взят из ветки форума. [/XPP]
При попытке открыть файл, Excel просто вылетает, не возвращая никакой ошибки. Тем не менее сам процесс остается висеть в менеджере задач.
Система: Win Srv 2008 R2, DAX 2009, Excel 2010
Возможно кто-то уже сталкивался с аналогичной проблемой. Возможно, что будет необходимо "подкрутить" какие-либо настройки системы.

Посмотрите тут Падает Ахапта-2009 при использовании .NET/CLRInterop/Word

Видимо причина та же...
Старый 22.08.2011, 16:13   #6  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
А вызов происходит с терминального сервера? Уже на форуме обсуждалось, что при работе с Excel через терминальный сервер, возникают проблемы с методами СОМ объектов...

Ошибки Word 2003 при работе в терминальном режиме
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!

Последний раз редактировалось plumbum; 22.08.2011 в 16:15. Причина: ссылка на упомянутую ветку
Старый 22.08.2011, 17:46   #7  
Batuev Artem is offline
Batuev Artem
Участник
 
5 / 10 (1) +
Регистрация: 10.03.2009
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Так что происходит с Excel? Он "вылетает" или "остается висеть"? По шагам тестировать не пробовали?
да, по шагам пробовал тестировать. При вызове workbooks._Open(...) Excel вылетает (на сколько я понимаю, при вызове clr объекта происходит какая-то ошибка или исключение, но в Аксапту обратно оно (оповещение об ошибке) не попадает), но процесс (а если вызвать заранее excel.set_Visible(true), то и визуально окно Excel) остается висеть в менеджере задач.
Старый 22.08.2011, 17:58   #8  
Batuev Artem is offline
Batuev Artem
Участник
 
5 / 10 (1) +
Регистрация: 10.03.2009
Цитата:
Сообщение от someOne Посмотреть сообщение
Посмотрите тут Падает Ахапта-2009 при использовании .NET/CLRInterop/Word

Видимо причина та же...
Спасибо за разъяснение. Возможно проблема и в самом сервере. Примерное решение (сделать оболочку на #C для clr объектов и вызывать ее из Аксапты) ясно, но хотелось бы решить проблему стандартными методами.
Старый 22.08.2011, 18:01   #9  
Batuev Artem is offline
Batuev Artem
Участник
 
5 / 10 (1) +
Регистрация: 10.03.2009
Цитата:
Сообщение от plumbum Посмотреть сообщение
А вызов происходит с терминального сервера? Уже на форуме обсуждалось, что при работе с Excel через терминальный сервер, возникают проблемы с методами СОМ объектов...

Ошибки Word 2003 при работе в терминальном режиме
да, вызов происходит с терминального сервера. Но, когда я вызываю объекты COM у меня все в порядке, а при вызове именно clr происходит падение.
Теги
.net, clr, excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Еще проблема с Excel при построении диаграмм zZ_TOP_Zz DAX: Программирование 7 22.09.2008 10:16
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
Импорт из Excel через шаблон стандартными средствами аксапты NV DAX: Функционал 5 20.01.2005 12:26
Проект "Движок отчётов с поддержкой Excel" Alks DAX: База знаний и проекты 6 07.01.2005 02:53
Проблема с созданием шаблона импорта Excel в 3.0 AK-76 DAX: Администрирование 1 25.07.2003 22:21

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:57.