Я пытаюсь преобразовать файл .xls в файл .xlsx на стороне сервера, используя класс Microsoft.Office.Interop.Excel.Workbook
следующим образом:
workBook.SaveAs("FILENAME_HERE", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
и я получаю следующую ошибку:
Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). : System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at CALLING_METHOD_IN_MY_LIBRARY_HERE...
Проблема заключается в том, что эта ошибка возникает только на промежуточном сервере; на моей локальной машине он отлично работает.
Вещи, которые я пробовал на промежуточном сервере:
- ** 1) Запустите dcomcnfg open Сервисы компонента
2) Разверните “Службы компонентов” → “Компьютер” → “Мой компьютер” → “Конфигурация DCOM”
3) Найдите “приложение Microsoft Excel”.
4) Чтобы открыть диалоговое окно “Свойства”
5) Нажмите на вкладку “Безопасность”,
6) “Разрешения запуска и активации, настройки разрешений, добавлены разрешения – Идентификация выполняется под пользователем Adminstrator (Этот пользователь), Интерактивный пользователь и запуск пользователей
7). Разрешения на запуск и активацию + Разрешения доступа + Разрешения для конфигурации = > добавлена служба IIS_IUSRS + Network Service с полным контролем **
2.
Изменена сборка проекта, который преобразует файл .xls из “Любой процессор” в “x86” на моем локальном компьютере и опубликовал эту библиотеку на сервере.
Кто-нибудь понял, как исправить эту проблему? Я борюсь за исправление этой проблемы в течение 2 дней.
Использование DCOMCNFG.exe. Откройте его и перейдите по ссылке:
Службы компонентов → Компьютеры → Мой компьютер → DCOM Config → Приложение Microsoft Excel.
Откройте свойства, выберите вкладку “Идентификация” и выберите интерактивного пользователя.
Такая же проблема была решена для меня, “разрешив взаимодействие с рабочим столом” для службы. (в утилите tomcat6w config на вкладке “Вход в систему” )
Попробуйте добавить метод Thread.Sleep, например Thread.Sleep(2000) в течение 2 секунд после workBook.open и workBook.SaveAs два метода. Если ваш файл Excel имеет много форматов, попробуйте продлить еще несколько секунд.