Ошибка открытия Excel: System.Runtime.InteropServices.COMException (0x80080005): получение фабрики классов COM для компонента с CLSID

У меня есть веб-приложение на C# .net. Я хочу, чтобы пользователь нажимал кнопку на веб-странице, сервер открывал электронную таблицу Excel и записывал в нее данные, а пользователь сохранял документ. Это работает локально с использованием Visual Studio 2010 и Office 2010. Однако на моем сервере я получаю эту ошибку:

System.Runtime.InteropServices.COMException (0x80080005): получение фабрики классов COM для компонента с CLSID {00024500-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80080005 Ошибка выполнения сервера (исключение из HRESULT: 0x80080005 (CO_E_SERER))).

Я исследовал и нашел массу ответов, в которых говорится, что нужно открыть dcomconfig и добавить пользователя с разрешениями в приложение Microsoft Excel. Мой сайт настроен на сквозную безопасность, поэтому я добавил себя; Я являюсь администратором на сервере, поэтому я гарантировал, что администраторы имели доступ; Я также добавил пул приложений по умолчанию для сетевой службы; также учетная запись машины ASP.NET; и, на всякий случай, добавил учетную запись, которую приложение использует при подключении к базе данных. Я все еще получаю ту же ошибку.

Мой сервер 64-битный, Office 2007, IIS 7.

Мой код:

    {
        try
        {
            Excel.Application xXL = null;
            Excel.Workbook xWB = null;
            Excel.Worksheet xSheet = null;
            xXL = new Excel.Application();
        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }
    }

2 ответа

  1. В DCOMCNFG щелкните правой кнопкой мыши на "Мой компьютер" и выберите свойства.
  2. Перейдите в Компонент /MyComputer/DCOMConfig
  3. Перейти к свойству приложения Microsoft Excel Безопасность
  4. В разрешениях на запуск и активацию нажмите "Custamize", добавьте к нему сетевую службу и дайте ей разрешение "Локальный запуск" и "Локальная активация". дать такие же разрешения как доступ и настройки конфигурации Нажмите ОК, и все. я могу запустить свое приложение сейчас.

Автоматизация Office - использование этих объектов Excel.Application и Excel.Workbook - не рекомендуется и не поддерживается Microsoft. Посмотрите:

В настоящее время Microsoft не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любых необслуживаемых, неинтерактивных клиентских приложений или компонентов (включая ASP, ASP.NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и / или или тупик, когда Office работает в этой среде.

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

Ссылка, которую я предоставил, перечисляет несколько альтернатив тому, что вы пытаетесь сделать, но если вы планируете создавать относительно простые листы Excel для своего пользователя, вам лучше просто создать файл CSV и отправить его обратно пользователю с помощью соответствующий заголовок (что-то вроде Response.ContentType="application/vnd.ms-excel"), чтобы возвращаемые данные были открыты в Excel по умолчанию. Вы можете увидеть больше ответов на этот вопрос здесь.

Другие вопросы по тегам