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
Возможно кто-то уже сталкивался с аналогичной проблемой. Возможно, что будет необходимо "подкрутить" какие-либо настройки системы.
Теги
.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, время: 13:06.