Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Ошибка при работе с excel


Автор: oleksergey 4.5.2009, 19:25
Всем добрый вечер.

Возникла проблема при работе с excel. Выводится такое сообщение об ошибке:

Сведения об исключении: System.UnauthorizedAccessException: Сбой при получении производства объектов класса COM для компонента с CLSID {00024500-0000-0000-C000-000000000046} в результате следующей ошибки: 80070005.

Попробывал поэкспериментировать с правами DCOM. Появилась новое исключение:

Сведения об исключении: System.Runtime.InteropServices.COMException: Microsoft Office Excel cannot open or save any more documents because there is not enough available memory or disk space. 

• To make more memory available, close workbooks or programs you no longer need. 

• To free disk space, delete files you no longer need from the disk you are saving to

Кто сталкивался с такой проблемой, помогите пожалуйста.

Автор: Любитель 5.5.2009, 10:17
 smile 

Во-первых, MS настоятельно не рекомендует использовать из-под веб-а Office Automation. Если можно без этого обойтись - лучше обойтись.

Во-вторых, приведи минимальный код, на котором репродьюсится твоя ошибка.

В-третьих, есть такая "особенность" при работе с excel automation из-под ASPNET-а: насчёт завершения приложения. Классических workbook.Close, application.Quit здесь не хватит. Необходимо вызывать Marshal.ReleaseComObject для всех используемых экселевских объектов. Как следствие - писать что-то типа worksheet.Sheets[1] вообще нельзя. Вначале надо сохранить референс на коллекцию воркшитов, потом получить воркшит. Ну и в конце явно зарелизить оба. Ну, само собой можно написать хелпер, удобно собирающий все эти ссылки (насколько это возможно) и релизищий их по явному вызову (ну и IDisposable для удобства можно реализовать).

В-четвёртых, не надо забывать об имперсонейте веб-сайта. Быть может, можно сделать-таки ASPNET-а более-менее полноценным юзером (в плане Office Automation), но.. вообщем в своём время это сделать не удалось. Впрочем, для экселя (если, конечно, нет внедрённых OLE-объектов) вполне хватит прошлого совета.

Автор: oleksergey 6.5.2009, 00:25
Проблема возникает при создании объекта.
Excel.ApplicationClass m_app = new Excel.ApplicationClass();

Автор: Любитель 6.5.2009, 01:05
Процессы экселя есть на сервере?

Добавлено через 2 минуты и 13 секунд
Цитата(oleksergey @  4.5.2009,  19:25 Найти цитируемый пост)
Попробывал поэкспериментировать с правами DCOM

И насчёт этого - локальный запуск и активация для "Microsoft Excel Application" пользователю ASPNET разрешены?

Автор: oleksergey 6.5.2009, 09:58
Цитата(Любитель @ 6.5.2009,  01:05)
Процессы экселя есть на сервере?

Добавлено @ 01:07
Цитата(oleksergey @  4.5.2009,  19:25 Найти цитируемый пост)
Попробывал поэкспериментировать с правами DCOM

И насчёт этого - локальный запуск и активация для "Microsoft Excel Application" пользователю ASPNET разрешены?

процесы есть конечно.
локальный запуск если разрешить, то появляется второе исключение о котором я писал.

Автор: Любитель 6.5.2009, 10:58
Цитата(oleksergey @  6.5.2009,  09:58 Найти цитируемый пост)
процесы есть конечно.

Процессы? Прибей все. Запусти заново.

Цитата(oleksergey @  6.5.2009,  09:58 Найти цитируемый пост)
локальный запуск если разрешить, то появляется второе исключение о котором я писал. 

Должен быть разрешён и локальный запуск, и локальная активация. Проблема первого эксепшена именно в этом - это точно.

Проблема второго, если верить тексту:
Цитата(oleksergey @  4.5.2009,  19:25 Найти цитируемый пост)
because there is not enough available memory or disk space. 


Поэтому процессы прибить надо точно. Да и место на диске проверить smile

Автор: oleksergey 6.5.2009, 18:20
Цитата(Любитель @ 6.5.2009,  10:58)
Цитата(oleksergey @  6.5.2009,  09:58 Найти цитируемый пост)
процесы есть конечно.

Процессы? Прибей все. Запусти заново.

Цитата(oleksergey @  6.5.2009,  09:58 Найти цитируемый пост)
локальный запуск если разрешить, то появляется второе исключение о котором я писал. 

Должен быть разрешён и локальный запуск, и локальная активация. Проблема первого эксепшена именно в этом - это точно.

Проблема второго, если верить тексту:
Цитата(oleksergey @  4.5.2009,  19:25 Найти цитируемый пост)
because there is not enough available memory or disk space. 


Поэтому процессы прибить надо точно. Да и место на диске проверить smile

убивание процесов ничего не меняет.
а места на диске более чем достаточно.

Автор: Любитель 6.5.2009, 18:25
Ок. Какая версия офиса на сервере? И какая система?

Автор: oleksergey 6.5.2009, 18:27
Цитата(Любитель @ 6.5.2009,  18:25)
Ок. Какая версия офиса на сервере? И какая система?

Office стоит 2007, а ОС Windows Vista

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)