c# excel com-interop

c# - no se puede convertir el objeto COM del tipo ''microsoft.Office.Interop.Excel.ApplicationClass'' a ''microsoft.Office.Interop.Excel.Application'' "



com-interop (6)

Este es mi primer intento de capturar algunos datos de Excel desde una aplicación de consola C #.

Me sale el error "no se puede convertir el objeto COM del tipo ''microsoft.Office.Interop.Excel.ApplicationClass'' a ''microsoft.Office.Interop.Excel.Application''".

Este código usaba la ''Biblioteca de objetos de Microsoft Excel 12.0'', y di referencia a Microsoft.Office.Interop.Excel.

Aún así, no pude superar este error, que creo que tiene su propia solución rápida.

Excavé un poco este sitio y encontré esta solución: el tipo de interoperabilidad no se puede incrustar

Sin embargo, no pude entenderlo, por lo que no pude implementar lo que se sugirió como solución.

Mi versión .Net es 4.5.

Cualquier ayuda es muy apreciada.

Gracias por adelantado.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using Excel = Microsoft.Office.Interop.Excel; namespace deneme { class Program { static void Main(string[] args) { Excel.Application xlApp = new Excel.Application(); xlApp.Visible = true; // <-- excel application xlApp.DisplayAlerts = false; // Open the workbook. Excel.Workbook wBook = xlApp.Workbooks.Open("C://FNN//XLA//fnnComTemplate.xlsx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // get the sheet Excel.Worksheet wSheet = wBook.Sheets[0]; // foreach (Excel.Worksheet sheet in wBook.Sheets) { if (sheet.Name == "templateSheet") { wSheet = sheet; } } Excel.Range rng = wSheet.get_Range("A1"); aux = wSheet.Range["F6"].Value; Console.WriteLine("interop result:" + aux); Console.ReadLine(); } } }


Microsoft Office 365

Estaba ejecutando Microsoft Office 365 con Windows 10 y probé las soluciones mencionadas para eliminar la clave de registro sin éxito.

Fui al panel de control en un intento de reparar la suite de Office 365.

Seleccioné la reparación rápida

¡Intenté mi programa nuevamente y todo funcionó!


Estoy seguro de que las respuestas a esta pregunta (y preguntas similares) que proponen editar el registro y eliminar referencias antiguas a versiones de Office que ya no están en la máquina son correctas .

Solo agrego esta respuesta porque actualmente me estoy pateando. Pasaron dos horas buscando claves en el registro y sin llegar a ninguna parte. El último lanzamiento de dados fue intentar una reparación simple en Microsoft Office y de repente mi error desapareció.

... me parece que vale la pena intentar una reparación antes de profundizar demasiado en la edición manual del registro.


Si no se trata de un error relacionado con el código, elimine la clave dada a continuación del registro.

Pasos:

Inicio -> Ejecutar -> regedit -> HKEY_CLASSES_ROOT -> TypeLib -> {00020813-0000-0000-C000-000000000046} -> 1.8 / 1.7 (Eliminar esto)

Solución: Este problema se puede resolver eliminando una clave de registro no válida que haya quedado de la versión superior de Office. Sigue los pasos anteriores.

Causa: este problema se debe a una clave de registro que queda si ha degradado su versión de Microsoft Office de Office 2010 a Office 2007 u Office 2013 a Office 2010 o 2007.

Avísame si esta solución no te ayuda


Tenía tanto 1.7 como 1.8 en el registro. Resuelto eliminando:

HKEY_CLASSES_ROOT/TypeLib/{00020813-0000-0000-C000-000000000046}/1.8


Una máquina se había actualizado a Office 2016 de 64 bits y la interfaz COM arrojaba excepciones cuando se llamaba desde una aplicación de 32 bits. No tenía entradas antiguas de TypeLib como las de la respuesta de Jayesh.

La comparación de las trazas de ProcessMonitor con una máquina que funciona con Office 2016 condujo a lo que parecen claves de registro sin salida en

HKEY_CLASSES_ROOT / Wow6432Node / TypeLib / {00024 ..

La máquina de trabajo verificará la clave de registro inexistente y devolverá

NOMBRE NO ENCONTRADO

La máquina anómala tenía la clave de registro, pero luego lanzaría una excepción poco después.

Después de eliminar repetidamente la clave de registro, volver a ejecutar el seguimiento, eliminar la siguiente clave que falla, se restableció la funcionalidad de la interfaz COM.


Usando exactamente el mismo código, tuve el mismo problema en una computadora portátil cuando todo funcionó bien en otra. Intenté varias soluciones encontradas aquí y allá en Internet, pero lo que finalmente funcionó fue la definición explícita del uso de la versión de la biblioteca que no es de 32 bits. Para hacerlo en Visual Studio, tuve que marcar y luego desmarcar la casilla "Preferir 32 bits" en la sección de compilación de la configuración del proyecto, que agregó <Prefer32Bit>false</Prefer32Bit> en el archivo .csproj.