Показать сообщение отдельно
Старый 11.11.2010, 17:57   #3  
snirk is offline
snirk
Участник
 
36 / 12 (1) ++
Регистрация: 11.07.2007
Есть большое подозрение, что Axapta тут не причем. С Office 2007 работает замечательно, как и с любым COM-объектом.
Тут скорее вопрос в формате файла .xltx, а точнее его отличия от .xlsx. Попробуйте просто переименовать .xltx в .xlsx вручную, без Axapta. В итоге при открытии увидите ту же ошибку.
Вызов BinData не преобразовывает файл из одного формата в другой, а делает точную копию (бинарную) и обзывает другим именем, т.е. то же что и при ручном переименовании.

А если использовать связку Axapta-Office, например так:
X++:
COM                 m_comApplication;
    COM                 comWorkBooks;
    COMVariant          varTemlateName;
    COM                 m_comDocument;
    ;
    
   // bufferTransfer.loadFile(_fromFile);
   // bufferTransfer.saveFile(_toFile);

    m_comApplication = new COM("Excel.Application");
    comWorkBooks = m_comApplication.workBooks();

    varTemlateName = new  COMVariant(COMVariantInOut::IN, COMVariantType::VT_BSTR);
    varTemlateName.bStr(_fromFile);

    m_comDocument = comWorkBooks.add(varTemlateName);

    varTemlateName.finalize();
    comWorkBooks.finalize();

    m_comDocument.saveAs(_toFile);
    m_comDocument.Close();
    m_comDocument.finalize();
    m_comApplication.finalize();
То все получится. Совет - смотрите в сторону классов ComExcelDocument_RU, ComOfficeDocument_RU
За это сообщение автора поблагодарили: 111andrei (1).