Errore di class non registrato durante la creazione della cartella di lavoro di Excel in C #

Quando provo ad accedere a un foglio di calcolo Excel utilizzando il seguente codice, viene visualizzato un errore “Libreria non registrata” quando si definisce l’object cartella di lavoro wrkbuk utilizzando C # da Visual Studio 2012 con Office 2007 (versione 12) installato

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(); 

I dettagli dell’errore sono

System.InvalidCastException was unhandled HResult = -2147467262 Message = Imansible lanciare l’object COM di tipo ‘Microsoft.Office.Interop.Excel.ApplicationClass’ al tipo di interfaccia ‘Microsoft.Office.Interop.Excel._Application’. Questa operazione non è riuscita perché la chiamata QueryInterface sul componente COM per l’interfaccia con IID ‘{000208D5-0000-0000-C000-000000000046}’ non è riuscita a causa del seguente errore: Libreria non registrata. (Eccezione da HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)). Fonte = mscorlib

Ho creato un riferimento a Microsoft.Office.Interop.Excel.dll nell’assembly di interoperabilità primario di Office 14 fornito con VS 2012 e anche per la versione 12 di Office della DLL e nessuno dei due risolve il problema. Ho provato a registrare le DLL con regasmo ma questo non aiuta neanche.

Posso creare il wrinkht foglio di lavoro sulla seguente riga OK con le dll di Office 14 e Office 12 in modo che il problema sembra influire solo sulla definizione della cartella di lavoro.

17 dicembre 2013

Ho provato a reinstallare Office 2007, ma ho trovato questa soluzione, che ha funzionato. Era a

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

Il problema è il codice di più versioni di Office: ho ricevuto il codice di Office 14, probabilmente proveniente dall’installazione di VS 2012

Sospetto che VS 2012 RC abbia installato le librerie dei tipi di Office 2013 e che ora siano registrate versioni duplicate. Ho ricevuto il messaggio di errore specifico (‘imansible lanciare _Application’ …. ‘TYPE_E_LIBNOTREGISTERED’) dopo una disinstallazione disordinata e quindi reinstallare una versione precedente di Office. Ho risolto il problema seguendo il consiglio di un altro thread del forum qui che non sono purtroppo in grado di trovare … in pratica ho cercato nel registro il CLSID nel messaggio di errore, quindi {00020970-0000-0000-C000-000000000046}. La sua chiave di registro conteneva due chiavi, una delle quali era chiamata ‘TypeLib’, che a sua volta conteneva un altro CLSID per la libreria dei tipi. Ho quindi cercato il registro, ricominciando dall’inizio, per quel secondo CLSID, che mi ha portato alla relativa libreria di tipi di interoperabilità. Aveva due voci …. 8.3 e 8.4, il numero più grande corrispondente alla versione successiva di Office …. che ho cancellato … e immediatamente è stato in grado di eseguire il mio programma.

Ho avuto lo stesso identico problema. Ecco come l’ho risolto:

Vai a HKEY_CLASSES_ROOT \ TypeLib \ e cerca “Office.Interop.Excel”.

Ho trovato HKEY_CLASSES_ROOT \ TypeLib \ (guid) \ 1.8 ma i suoi nodes figli erano vuoti! L’ho cancellato perché Office 15 non era installato su quella macchina, e presto – ha funzionato.

O il nostro programma di installazione del progetto VSTO o il nostro programma di installazione personalizzato devono aver inserito la cartella 1.8 lì.

Ho trovato la soluzione qui:

Errore durante l’accesso ai componenti COM

Confermerò la risposta di @stuzor su due macchine che ho incontrato.

Sfondo:

 Windows7 64 bit Office 2010 (32bit) Lync 2013 

HKEY_CLASSES_ROOT \ TypeLib \, cercato “Office.Interop.Excel”. Trovato la cartella “1.8” appena esistente. Dopo la cancellazione, la funzione in una vecchia app VB.net ha iniziato a funzionare immediatamente.

Ho avuto esattamente lo stesso problema. Se è stata installata una nuova versione di Office e per qualche motivo è necessario installare la versione precedente senza rimuovere quella nuova (per il mio caso è sufficiente installare l’editor di foto di Office XP) e questo ha causato il problema.

Dopo aver trascorso 3 ore su e giù, il modo migliore è riparare la nuova versione di Office e tutto è tornato alla normalità come dovrebbe essere.

Spero che questa informazione ti aiuti se hai lo stesso scenario o simili.

Qualcosa che non è stato menzionato qui ma che può essere utile è che le sottochiavi di 1.XX possono causare problemi. Ad esempio: in Computer \ HKEY_CLASSES_ROOT \ TypeLib {00020813-0000-0000-C000-000000000046} ho avuto la sottochiave 1.9 . Questo a sua volta ha la sottochiave 0 (o dovrebbe). Ora sotto questo, c’erano due sottochiavi – Win32 e Win64 . Di conseguenza, Visual Studio non è stato in grado di risolvere il percorso di Microsoft.Office.Interop.Excel.dll: leggeva due sottochiavi in ​​cui poteva leggerne solo una. L’eliminazione della sottochiave Win32 ha risolto completamente il problema. Si prega di notare che questo è stato fatto dopo una completa reinstallazione di VS 2017 e Office 365 Pro Plus. Spero che questo aiuti qualcuno.

L’hack del registro sopra descritto ha risolto per me lo stesso problema. L’unica differenza era che avevo una 1.9 e una 1.7. Ho cancellato la chiave 1.9 e il mio problema è stato risolto.

Altre informazioni:

Sistema operativo: Windows 10

Visual Studio Professional 2015

C # Windows Form Application

Questo era sul mio portatile da lavoro. Abbiamo installato Office 2010 su ogni workstation.

Alcune altre cose che ho provato che NON FUNZIONANO erano le seguenti:

Riparazione di MS Office

Reinstallare MS OFFICE

Download di Microsoft Office 2010: assembly di interoperabilità primari di Microsoft.

Ho anche avuto diverse versioni di Microsoft.Office.Interop.Excel.dll sul mio laptop. L’eliminazione delle versioni precedenti non ha risolto il problema.

Sono contento di essere andato su STACKOVERFLOW.COM perché questo posto ROCCE !!!!!!

Abbiamo avuto lo stesso problema.

La nostra configurazione è così:
Office 2010: Word ed Excel ma Office 2013: Outlook

Abbiamo eseguito il programma di installazione per Office 2010 e scelto l’opzione di riparazione. Successivamente, tutte le chiavi errate nel registro di Word ed Excel sono state eliminate e il problema è stato risolto.

Questa è una risposta se non puoi modificare o eliminare i record del regedit. Ho avuto lo stesso problema, nella società in cui lavoro, ci sono circa 30 macchine con Office 2010 e non ho potuto cancellare o aprire record nel regedit. perché la macchina client era in un dominio che non me lo permetteva. sebbene avessi i permessi di amministratore, non mi permetteva di cancellare i record nel regedit. Ho provato a trovare una soluzione per 1 mese e non l’ho trovato. quindi ho dovuto smettere di usare interop e migrare a OpenXml per modificare i modelli Excel e ClosedXml per creare nuovi Excel. Questo mi ha salvato la vita, perché il mio capo mi stava già premendo.

Aprire il progetto / soluzione in Visual Studio e aprire la console utilizzando il comando Strumenti> NuGet Package Manager> Gestione pacchetto Manager. e installare 2 pacchetti

  1. Install-Package DocumentFormat.OpenXml -Version 2.5.0
  2. Install-Package SpreadsheetLight

pd: OpenXml 2.8 non funziona con SpreadsheetLight, meglio usare 2.5.0

aggiungi questo all’inizio

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

nel tuo pulsante o class copia e modifica

  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 + "!"); }