Microsoft.Office.Interop

Давно не выкладывал технических постов, а они, как показывает статистика, приносят наибольшее число просмотров через поисковики. Поэтому сегодня опишу общно и без детальных картинок проблематику взаимодействия с документами MS Office 2007 из веб-сайта при помощи поставляемых в комплекте библиотек-прослоек Office.Interop. Эта история интересна тем, что ее решение содержит кучу проблем, но нигде я не видел целостного описания их преодоления.
  • Во-первых, вам понадобится установить на сервер офис. Берем пиратскую энтерпрайс. Так как некоторые версии могут отказаться ставится на сервере через терминал (RDP).
  • После того как в программе сделали Reference, написали нужны код, скопировали на сервер у вас появится: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Решение - запускаем DCOMCNFG, выставляем пользователю NetworkServices права на запуск компонентов MicrosoftOffice(Word/Excel) или для того пользователя от лица которого работает ApplicationPool.
  • Запускаем повторно, вылезает (0x800A03EC): Microsoft Office cannot open or save any more documents because there is not enough available memory or disk Решение - Создать системные папки
    C:\Windows\SysWOW64\config\systemprofile\Desktop (для x64) C:\Windows\System32\config\systemprofile\Desktop (для x86)
    и выставить права для NetworkServices на папку - systemprofile.
  • На этом квест не заканчивает. При повторном запуске программа выдаст (0x80028018): Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD)) http://support.microsoft.com/kb/320369 Что говорит о разнице в локализации вашего кода и компонента. Решается переключением локализации вызывающего потока перед вызовов функций COM объекта
    System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); //вызовы Office.Interop

Вот пожалуй все, однако, на win2003x64 IIS6 EN даже вышеописанное не помогло.

Метки: Code


Добавить комментарий



biuquote
Loading


Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Topbot at FeedsBurner