Открытие Word Word через код в Visual Studio C # - PullRequest
2 голосов
/ 30 июня 2011

Я занимаюсь разработкой Office Development с помощью Visual Studio. И получите ошибку ниже

Error: 
**
Unable to cast COM object of type 'Microsoft.Office.Interop.Word.ApplicationClass' to interface type 'Microsoft.Office.Interop.Word._Application'. 
This operation failed because the QueryInterface call on the COM component for the interface with IID '{00020970-0000-0000-C000-000000000046}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
**

Код: (также на https://gist.github.com/1056809)

if (File.Exists((string)strDocPath))
{
    Word.Application wdApp = new Word.Application();
    wdApp.Visible = true; //Error thrown here

    object readOnly = false;
    object isVisible = true;
    object oMissing = System.Reflection.Missing.Value;

    //Open the word document
    //Error thrown on line below.
    Word.Document aDoc = wdApp.Documents.Open(ref strDocPath, ref oMissing, ref readOnly, ref oMissing, ref oMissing, ref oMissing,
                                              ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref isVisible,
                                              ref oMissing, ref oMissing, ref oMissing, ref oMissing); 


    // Activate the document
    aDoc.Activate();
}

Что это за ошибка? Как я могу избежать этого?

Ответы [ 2 ]

2 голосов
/ 01 октября 2012

Проблема в том, что HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ CLSID {000209FF-0000-0000-C000-000000004646} невозможно зарегистрировать.Хотя класс существует (Microsoft.Office.Interop.Word.ApplicationClass) в вашем реестре, это не означает, что он был зарегистрирован.Microsoft не разрешает регистрировать Microsoft.Office.Interop.Word.dll по необъяснимой причине и в результате, если вы ссылаетесь на класс ApplicationClass в своем коде;вы столкнетесь с этой проблемой при развертывании на реальном сервере.Вы не получите сообщение об ошибке / предупреждение на вашем локальном / сборочном компьютере.Вот как может выглядеть общая ошибка:

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

Вывод: даже если у вас установлен / активирован и лицензирован Microsoft Office 2007/2010.DLL-файл "Microsoft.Office.Interop.Word.dll" не может быть зарегистрирован.Мне понадобилась почти целая неделя, чтобы понять это.ПРИМЕЧАНИЕ: чтобы убедиться в этом;скачать-установить-запустить "RegDllView".Вы можете увидеть все зарегистрированные библиотеки DLL для "WINWORD.EXE".Обратите внимание, что {000209FF-0000-0000-C000-000000000046} не будет отображаться.Попытка даже вручную зарегистрировать «Microsoft.Office.Interop.Word.dll» с помощью программы потерпит неудачу с кодом ошибки 127. Я считаю, что обходной путь на самом деле заключается в использовании предоставленного интерфейса «Документ» в Microsoft.Office.Interop.Word.dll.Это просто обертка для WINWORD.EXE, к чему она сводится.

1 голос
/ 30 июня 2011

Попробуйте заменить первую строку после оператора if чем-то вроде этого:

Microsoft.Office.Interop.Word.Application wdApp = new Microsoft.Office.Interop.Word.Application();

Затем убедитесь, что вы добавили ссылку на COM-объект "Библиотека объектов Microsoft Word 12.0", которая будет выглядеть как "Microsoft.Office.Interop.Word "в обозревателе решений.

Я проверил это, и появилось пустое приложение MS Word.Итак, давайте посмотрим, сможем ли мы зайти так далеко.

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