Показать сообщение отдельно
Старый 19.08.2010, 13:23   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Вывод в Excel на сервере
Есть задача -
На сервере открыть файл шаблона Excel, записать туда что-нибудь, сохранить
На 3.0, 4.0 все работало отлично
На 2009 не работает. Объект Application создается, но при попытке открытия файла появляется ошибка
Method 'add' in COM object of class 'Workbooks' returned error code 0x800A03EC (<unknown>) which means: Нет доступа к файлу 'c:\MyData\test.xlsx'

При изменении запуска класса на client все работает. АОС и Клиент установленны на одной машине, работают под одним пользователем(администратором).
С чем вообще может быть связана такая ошибка? Если это принципиально не возможно, то Microsoft конечно подложило большую свинью, так как пользователи практически всех веб-порталов любили всякие модификации, которые генерят ексельки на портале
Пример кода для воспроизведения:
X++:
static server void openFile()
{
    COM         comWorkBooks;
    COMVariant  varTemlateName;
    COM         m_comApplication;   // COM interface to MS Office application
    COM         m_comDocument;      // COM interface to MS Office documnet
    str         template = 'c:\\MyData\\test.xlsx';
    Set         permissionSet;
    ;
    permissionSet =  new Set(Types::Class);
    permissionSet.add(new FileIoPermission(template,'rw'));
    permissionSet.add(new InteropPermission(InteropKind::ComInterop));
    CodeAccessPermission::assertMultiple(permissionSet);


    m_comApplication = new COM('Excel.Application');
    m_comApplication.Visible(false);

    comWorkBooks = m_comApplication.workBooks();

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

    m_comDocument = comWorkBooks.add(varTemlateName);
    info('ok');
}

Последний раз редактировалось trud; 19.08.2010 в 13:26.