AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 22.08.2011, 11:04   #1  
Batuev Artem is offline
Batuev Artem
Участник
 
5 / 10 (1) +
Join Date: 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
Возможно кто-то уже сталкивался с аналогичной проблемой. Возможно, что будет необходимо "подкрутить" какие-либо настройки системы.
Old 22.08.2011, 14:52   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,720 / 1207 (44) ++++++++
Join Date: 13.01.2004
Blog Entries: 3
Сразу после создания экземпляра Excel в целях тестирования сделайте его видимым

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

Как правило, проблема в сообщении об ошибке в Excel, которое требует нажать "Ok" для продолжения процесса открытия файла. Визуализация экземпляра Excel поможет убедится в правильности данного предположения
Old 22.08.2011, 15:12   #3  
Batuev Artem is offline
Batuev Artem
Участник
 
5 / 10 (1) +
Join Date: 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 просто вылетает.
Old 22.08.2011, 15:35   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,720 / 1207 (44) ++++++++
Join Date: 13.01.2004
Blog Entries: 3
Так что происходит с Excel? Он "вылетает" или "остается висеть"? По шагам тестировать не пробовали?
Old 22.08.2011, 16:11   #5  
someOne is offline
someOne
Участник
someOne's Avatar
 
174 / 432 (15) +++++++
Join Date: 11.12.2008
Location: Москва
Quote:
Originally Posted by Batuev Artem View Post
Доброго времени суток!
Возникла проблема вызова объектов Excel, используя объекты clr.
Пример кода был взят из ветки форума. [/XPP]
При попытке открыть файл, Excel просто вылетает, не возвращая никакой ошибки. Тем не менее сам процесс остается висеть в менеджере задач.
Система: Win Srv 2008 R2, DAX 2009, Excel 2010
Возможно кто-то уже сталкивался с аналогичной проблемой. Возможно, что будет необходимо "подкрутить" какие-либо настройки системы.

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

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

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

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

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

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

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Еще проблема с 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 17:30.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.