c# - office - Error al acceder a los componentes COM
microsoft.office.interop.excel not found (6)
Creé un complemento para Microsoft Office Word. No hay problema al utilizar el complemento cuando Word se ejecuta como administrador, pero cuando no se ejecuta como administrador, hay dos excepciones comunes que acceden a los elementos de la cinta de opciones.
La primera excepción:
Unable to cast COM object of type ''System.__ComObject'' to interface type ''Microsoft.Office.Core.IRibbonUI''. This operation failed because the QueryInterface call on the COM component for the interface with IID ''{000C03A7-0000-0000-C000-000000000046}'' failed due to the following error: could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)).
at Microsoft.Office.Core.IRibbonUI.InvalidateControl(String ControlID)
Este error ocurre cuando el Control se invalida con el siguiente código:
ribbon.InvalidateControl("control-id");
Y la segunda excepción:
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: could not be found. (Exception from HRESULT: 0x80030002 (STG_E_FILENOTFOUND)).
at Microsoft.Office.Interop.Word.ApplicationClass.get_Selection()
Este error ocurre en la última línea del siguiente código:
object wdStory = Word.WdUnits.wdStory;
object wdMove = Word.WdMovementType.wdMove;
WrdApp.Selection.EndKey(ref wdStory, ref wdMove)
¿Como puedo solucionar este problema?
¡Problema resuelto!
Anteriormente instalé Office 2010, por lo que hay algunas incoherencias en el Registro de Windows. Para solucionarlos, abre el regedit
y busca el CLSID a partir del error.
Encontrarás algo así para el segundo error:
HKEY_CLASSES_ROOT/Interface/{00020970-0000-0000-C000-000000000046}
Con las subclaves:
- ProxyStubClsid
- ProxyStubClsid32
- TypeLib
Eche un vistazo a los valores (Default)
y de Version
dentro de TypeLib
.
Ahora encuentre el nodo a continuación, utilizando el valor (Default)
como <TypeLib ID>
(Default)
<TypeLib ID>
.
HKEY_CLASSES_ROOT / TypeLib / <TypeLib ID>
/
Como hijo de estos elementos, encontrará más de un elemento, uno de ellos es la Version
del primer registro. Si inspecciona los otros elementos, descubrirá que no apuntan a nada. Eliminar a los demás! ¡Está resuelto!
@Victor Me tienes en el camino correcto. Mi problema no eran los valores múltiples en el registro, sino más bien, un valor perdido que Office365 nunca agregó. Gracias a ti pude encontrar mi propia resolución. Mil mil gracias.
Los detalles están aquí para cualquier persona que todavía esté buscando una resolución.
Empecé a recibir la misma excepción después de actualizar a la última versión de Office. Probé una serie de soluciones sugeridas, incluida la limpieza del registro de una manera similar a lo que describió @Victor.
Lo que eventualmente ayudó (aunque podría haber sido una combinación de factores) fue ''reparar'' la instalación:
Programas y características → última versión de Office → Reparación .
La reparación de la oficina funcionó para mí. En mi caso, había instalado Project, que creo que alteró la configuración y no fue capaz de invocar un procedimiento para migrar datos de un libro de Excel a SQL.
Simplemente instale Office 2010 / MS word / .NET Programmability Support.
Tengo el mismo problema hoy con VS2015 y Office 2013. Cambiar el objetivo de la plataforma a x64 funcionó para mí.