Взаимодействие Excel работает на компьютере с Office 2007, но не работает на компьютере с Office 2010 - PullRequest
9 голосов
/ 19 мая 2011

У меня есть приложение C # WPF (.NET 4.0), которое использует взаимодействие Excel для чтения данных из файла Excel.

Когда я запускаю это приложение на моей машине для разработки с Excel 2007, оно работает нормально. Когда я запускаю его на другом компьютере, на котором установлен Excel 2010, происходит сбой со следующим сообщением об ошибке:

System.Runtime.InteropServices.COMException (0x80040154): Сбой при получении фабрики классов COM для компонента с CLSID {00024500-0000-0000-C000-000000000046} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Ошибка возникает при попытке создать объект Microsoft.Office.Interop.Excel.Application, например:

var app = new Application();

Мой проект имеет ссылку на Microsoft.Office.Interop.Excel.dll (версия 14.0.0.0, среда выполнения v2.0.50727), которая находится по адресу:

C: \ Program Files \ Microsoft Visual Studio 10.0 \ Инструменты Visual Studio для Office \ PIA \ Office14 \ Microsoft.Office.Interop.Excel.dll

Я попытался запустить приложение с настройками по умолчанию на указанной DLL:

  • Копировать локально = Ложь
  • Типы вставок взаимодействия = True
  • Специальная версия = True

Я также попытался запустить приложение со следующими настройками на указанной DLL:

  • Копировать локальный = True
  • Вставить типы взаимодействия = Ложь
  • Специальная версия = True

Но на компьютере с Office 2010 ни одна из этих попыток не сработала.

Другие примечания. Компьютер с Office 2010 - 64-разрядная с Windows 7. Мой компьютер для разработки - X86 с Windows XP.

Вопрос

Что вызывает исключение "класс не зарегистрирован" и как его исправить?

Редактировать

В ответ на ответ Алекса я попытался собрать приложение под Any CPU, X86 и X64, но это не имело никакого значения. Я все еще получаю ту же ошибку "класс не зарегистрирован".

Редактировать 2

Только что попробовал приложение на 32-битной машине с Office 2010. Никаких ошибок. Таким образом, это может быть что-то не так с конкретной машиной, или это может быть комбинация 64-битной и Office 2010.

Редактировать 3

Хорошо, теперь я проверил его на другом 64-битном компьютере с Office 2010. Опять без ошибок. Я думаю, что это означает, что что-то не так с конкретной машиной, и это не вина моего программного обеспечения. Ааа, программирование.

1 Ответ

5 голосов
/ 20 мая 2011

Предварительный ответ: с моим программным обеспечением все в порядке, и что-то не так с настройкой на этом конкретном компьютере.

Правка

Я только что обнаружил что-то,источник проблемы.На проблемном компьютере установлен Office, но он настроен как «нажми и работай» (работает из Интернета), а не на основе MSI (работает из EXE).Это означает, что определенные параметры реестра, библиотеки DLL, компоненты и т. Д. Недоступны для Microsoft.Office.Interop.Excel, поэтому происходит сбой.

Редактировать 2

Это определенно была проблема,Просто обновлен до полной установки Office на основе MSI, и все отлично работает.

Редактировать 3

Добавлено это как ошибка в Microsoft Connect:

https://connect.microsoft.com/VisualStudio/feedback/details/672276/excel-interop-fails-on-machine-where-office-is-installed-as-click-to-run#details

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...