Показать сообщение отдельно
Старый 08.04.2010, 12:29   #3  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 164 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Предлагаю попробовать переписать методы заменив вызовы COM на CLR.

Пример кода создающий csv файл:

X++:
protected FileName excel2csv(FileName _excelFileName)
{
    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;
    ;
    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');

    excel            = new Microsoft.Office.Interop.Excel.ApplicationClass();
    workbooks        = excel.get_Workbooks();
    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);
    workbook.Close(false, _excelFileName, null);

    CodeAccessPermission::revertAssert();

    return textFileName;
}
За это сообщение автора поблагодарили: Logger (4), gl00mie (5), Batuev Artem (0).