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