Ошибка класса не зарегистрирована при создании книги Excel на С#

Когда я пытаюсь получить доступ к электронной таблице 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 безрезультатно, но нашел это решение, которое сработало. Это было в

http://social.msdn.microsoft.com/Forums/vstudio/en-US/d3f92da7-96d3-404b-89d0-d236800ceae5/vs-2012-rc-and-visual-studio-tools-для-office?forum=vsto

Проблема заключается в коде из нескольких версий 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... которую я удалил... и сразу смог запустить свою программу.


person SimonKravis    schedule 05.12.2013    source источник
comment
Реестр на этой машине поврежден и отсутствует ключ. Переустановите Office, чтобы исправить это.   -  person Hans Passant    schedule 05.12.2013
comment
В качестве альтернативы вы можете использовать Open XML SDK (или оболочка типа ClosedXML). Таким образом, вы можете создавать документы Excel без необходимости установки Office на компьютере.   -  person Andreas Adler    schedule 05.12.2013
comment
Отредактированный пост, чтобы предоставить решение   -  person SimonKravis    schedule 17.12.2013
comment
Я воспроизвел проблему на 3-х разных машинах и все они были связаны с установкой офисных компонентов разных версий. Решение, описанное SimonKravis (regedit), у меня работает правильно, и я считаю, что его можно расширить для большинства подобных исключений с помощью MsOffice Interop Tools.   -  person sɐunıɔןɐqɐp    schedule 05.02.2015
comment
Это произошло со мной после установки Project 2013 при сохранении Office 2010 для всех других приложений Office. Была надстройка, которая была разработана для Outlook 2010 и отлично работала до установки Project. Установка Project сломала надстройку. Решение Stuzor Registry Edit ниже исправило это.   -  person ivanatpr    schedule 08.03.2016
comment
@SimonKravis Пожалуйста, предоставьте свое решение в ответе, а затем отметьте этот ответ как правильный, используя зеленую галочку. Это закрывает QA и помогает другим людям найти ответ. Это нормально, чтобы ответить на свой вопрос.   -  person HackSlash    schedule 27.08.2019
comment
Была такая же проблема при попытке создать Word.Application с помощью Powershell. Исправление было таким же, как вы описали, за исключением того, что мои версии были 8.6 и 8.7 (и я удалил 8.7)   -  person Brad    schedule 13.11.2019


Ответы (8)


У меня была точно такая же проблема. Вот как я это исправил:

Go to

HKEY_CLASSES_ROOT\TypeLib\ и найдите Office.Interop.Excel.

Я нашел HKEY_CLASSES_ROOT\TypeLib\(guid)\1.8, но его дочерние узлы были пусты! Я удалил его, потому что на этой машине не был установлен Office 15, и вуаля - все заработало.

Либо наш установщик проекта VSTO, либо наш собственный установщик должен поместить туда папку 1.8.

Я нашел решение здесь:

Ошибка доступа к COM-компонентам

person stuzor    schedule 28.05.2014
comment
Если вы удалили Office 2016, хотите сохранить 2013 и ключ HKEY_CLASSES_ROOT\TypeLib(guid)\1.9 не имеет дочерних элементов, удалите папку 1.9. - person Alejandro Lopez-Lago - MSFT; 15.08.2016
comment
Спасибо. Связан ли номер с версией Office? т.е. 1,6 = 2007, 1,7 = 2010, 1,8 = 2013 и так далее? - person Himanshu Jansari; 15.03.2018
comment
@ hims056, да, номера папок относятся к номерам офисных версий. - person stuzor; 28.03.2018

У меня была точно такая же проблема. Если вы установили новую версию Office и по какой-то причине вам нужно установить старую версию, не удаляя новую (в моем случае мне просто нужно установить фоторедактор Office XP), и это вызвало проблему.

Проведя 3 часа вверх и вниз, лучший способ - восстановить новую версию Office, и все вернулось в норму, как и должно быть.

Надеюсь, эта информация поможет, если у вас такой же или похожий сценарий.

person Anand    schedule 28.04.2015
comment
С офисом 365 (или другими) попробуйте вариант восстановления, он восстановит ключи. Это исправило мою проблему. - person Rob; 26.09.2016
comment
Я попробовал решение с реестром, но это не сработало. Пользуюсь офисным ремонтным инструментом и работаю. - person Raphael; 01.02.2017

Кое-что, что здесь не упоминалось, но может быть полезно, заключается в том, что подразделы 1.XX также могут вызывать проблемы. Например: в разделе Computer\HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C000-000000000046} у меня был подраздел 1.9. Это, в свою очередь, имеет подраздел 0 (или должен). Теперь под этим было два подраздела - Win32 и Win64. В результате Visual Studio не удалось определить расположение Microsoft.Office.Interop.Excel.dll — она считывала два подраздела, тогда как могла прочитать только один. Удаление подраздела Win32 полностью решило мою проблему. Обратите внимание, что это было сделано после полной переустановки VS 2017 и Office 365 Pro Plus. Надеюсь, это поможет кому-то.

person VBAMadeMeDoIt    schedule 31.01.2018
comment
Спасибо, это сводило меня с ума в течение последнего часа! Я думаю, это потому, что у меня есть Office 2013, но наша компания недавно выпустила последнюю версию Skype для бизнеса, которая, как я предполагаю, является частью Office 2016. - person Kris Wragg; 18.05.2018

Я подтвержу ответ @stuzor на двух машинах, с которыми я столкнулся.

Задний план:

Windows7 64 bit
Office 2010 (32bit) 
Lync 2013 

HKEY_CLASSES_ROOT\TypeLib\ , поиск «Office.Interop.Excel». Нашел едва существующую папку "1.8". После удаления функция в старом приложении VB.net сразу заработала.

person matt.bungard    schedule 13.10.2014

Это ответ, если вы не можете изменить или удалить записи regedit. У меня была такая же проблема, в компании где я работаю около 30 машин с офисом 2010 и я не мог стереть или открыть записи в regedit. потому что клиентская машина была в домене, меня не пускали. хотя у меня были права администратора, это не позволяло мне удалять записи в regedit. Я пытался найти решение в течение 1 месяца, и я не нашел его. поэтому мне пришлось прекратить использовать взаимодействие и перейти на OpenXml для редактирования шаблонов Excel и ClosedXml для создания нового Excel. Это спасло мне жизнь, потому что мой босс уже давил на меня.

Откройте проект/решение в Visual Studio и откройте консоль с помощью команды Сервис > Диспетчер пакетов NuGet > Консоль диспетчера пакетов. и установить 2 пакета

  1. Пакет установки DocumentFormat.OpenXml — версия 2.5.0
  2. Install-Package SpreadsheetLight

pd: OpenXml 2.8 не работает с SpreadsheetLight, лучше используйте 2.5.0

добавь это в начале

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;

в вашей кнопке или классе скопируйте и измените

    SaveFileDialog fichero = new SaveFileDialog();
    fichero.Filter = "Excel (*.xlsx)|*.xlsx";
    if (fichero.ShowDialog() == DialogResult.OK)
    {
        SLDocument sl = new SLDocument("c:\\bin\\est1.xlsx", "Sheet1");

        sl.SetCellValue("E9", "Let's party!!!!111!!!1");

        sl.SelectWorksheet("Sheet2");
        sl.SetCellValue("C7", "Before anyone calls the popo!");

        sl.AddWorksheet("ERTRT");
        sl.SetCellValue("B4", "Who let the dogs out?");
        sl.SetCellValue("B5", "Woof!");

        sl.SaveAs(fichero.FileName);    

        MessageBox.Show("Report " + fichero.FileName + "!");
    }
person Aliendo    schedule 11.08.2018
comment
Очень-очень разный подход к проблеме, но в итоге решает ее. - person CLS; 19.08.2020

Описанный выше взлом реестра решил ту же проблему для меня. Разница была только в том, что у меня были версии 1.9 и 1.7. Я удалил ключ 1.9, и моя проблема была исправлена.

Другая информация:

ОС: Виндовс 10

Visual Studio Professional 2015

Приложение C# Windows Form

Это было на моем рабочем ноутбуке. У нас на каждой рабочей станции установлен Office 2010.

Некоторые другие способы, которые я пробовал, НЕ РАБОТАЛИ:

Восстановление MS OFFICE

Переустановка MS ОФИС

Загрузка Microsoft Office 2010: основные сборки взаимодействия с сайта Microsoft.

У меня также было несколько версий Microsoft.Office.Interop.Excel.dll на моем ноутбуке. Удаление предыдущих версий не решило проблему.

Рад, что зашел на STACKOVERFLOW.COM, потому что это место ПОТРЯСАЮЩЕ!!!!!!

person P. Mennetti    schedule 27.07.2017

У нас была такая же проблема.

Наша установка выглядит следующим образом:
Office 2010: Word и Excel, но Office 2013: Outlook

Мы запустили программу установки Office 2010 и выбрали вариант восстановления. После этого все неправильные ключи в реестре для Word и Excel были удалены, и проблема была решена.

person cpelletier    schedule 05.05.2017

Была та же проблема... Код, который ранее выполнялся, начал выдавать то же исключение при создании нового экземпляра приложения. Чтобы исправить это:

  1. Программы и компоненты, упорядочил их по дате установки и увидел, что некоторые обновления Microsoft Office 365 были выпущены в тот же день, когда код перестал работать.
  2. Для Microsoft Office 365 -en-us и Microsoft Office 365 Pro Plus -en-us щелкните правой кнопкой мыши Изменить и выберите Быстрый Исправить

Попытался запустить мое решение, и оно снова заработало.

person Carolina_G    schedule 26.03.2019