Когда я пытаюсь получить доступ к электронной таблице Excel, используя следующий код, я получаю сообщение об ошибке «Библиотека не зарегистрирована» при определении объекта книги wrkbuk с использованием C# из Visual Studio 2012 с установленным Office 2007 (версия 12).
Microsoft.Office.Interop.Excel.Application excapp = new Microsoft.Office.Interop.Excel.Application();
string bookname = @"C:\Users\Public\Documents\RECRUITMENT & SELECTION\MOVEMENTS\MOVEMENTS\Miscellaneous Documents\VacanciesREAL.xls";
Workbook wrkbuk = excapp.Workbooks.Open(bookname);
Worksheet wrksht = new Worksheet();
Детали ошибки
System.InvalidCastException не было обработано HResult=-2147467262
Message=Невозможно преобразовать COM-объект типа «Microsoft.Office.Interop.Excel.ApplicationClass» в тип интерфейса «Microsoft.Office.Interop.Excel._Application». Эта операция завершилась неудачно, так как вызов QueryInterface компонента COM для интерфейса с IID "{000208D5-0000-0000-C000-000000000046}" завершился неудачно из-за следующей ошибки: библиотека не зарегистрирована. (Исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)). Источник = mscorlib
Я создал ссылку на Microsoft.Office.Interop.Excel.dll в основной сборке взаимодействия Office 14, которая поставляется с VS 2012, а также для версии dll Office 12, и ни одна из них не устраняет проблему. Я пробовал регистрировать dll с помощью regasm, но это тоже не помогает.
Я могу создать рабочий лист wrksht в следующей строке OK с dll Office 14 и Office 12, поэтому проблема, похоже, влияет только на определение рабочей книги.
17 декабря 2013 г.
Пробовал переустанавливать Office 2007 безрезультатно, но нашел это решение, которое сработало. Это было в
Проблема заключается в коде из нескольких версий Office. У меня был код из Office 14, возможно, из установки VS 2012.
Я подозреваю, что VS 2012 RC установил библиотеки типов Office 2013 и что теперь зарегистрированы повторяющиеся версии. Я получил это конкретное сообщение об ошибке
('невозможно применить _Application'....'TYPE_E_LIBNOTREGISTERED')
после беспорядочного удаления, а затем повторной установки более старой версии Office. Я решил это, следуя совету другой ветки форума, которую я, к сожалению, не смог найти ... в основном я искал в реестре CLSID в сообщении об ошибке, поэтому {00020970-0000-0000-C000-000000000046}
. Его ключ реестра содержал два ключа, один из которых назывался «TypeLib», который, в свою очередь, содержал другой CLSID для библиотеки типов. Затем я поискал в реестре, начиная с самого начала, этот второй CLSID, который привел меня к соответствующей библиотеке типов взаимодействия. В нем было две записи... 8.3 и 8.4, большее число соответствовало более поздней версии Office... которую я удалил... и сразу смог запустить свою программу.