visual office net microsoft application vb.net excel dll interop

vb.net - office - Diferentes referencias de Interop en dos computadoras diferentes no funcionan



microsoft office interop excel visual basic (3)

Utilicé la automatización de Excel mucho más de lo que me gustaría admitir, y nunca he hecho referencia a Interop.Excel.dll. Siempre he hecho referencia al primero. ¿Por qué está haciendo referencia a eso y qué errores obtiene?

¿Están refiriéndose a la misma versión de Excel (5.0 versos 11.0)? ¿Ustedes tienen exactamente la misma versión de oficina, paquetes de servicio y todo? Esta podría ser la différance.

Cuando agrego una referencia a Microsoft.Office.Interop.Excel en mi computadora, Visual Studio agrega esto al archivo de proyecto:

<COMReference Include="Excel"> <Guid>{00020813-0000-0000-C000-000000000046}</Guid> <VersionMajor>1</VersionMajor> <VersionMinor>5</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> </COMReference>

Hay otro desarrollador en el equipo que obtiene errores y necesita agregar un archivo DLL al proyecto llamado Interop.Excel.dll, que reemplaza el código anterior con esto en el archivo de proyecto:

<Reference Include="Interop.Excel, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>My Project/Interop.Excel.dll</HintPath> </Reference>

Esto funciona en mi computadora.

¿Podría explicar las diferencias entre los dos métodos, cuál es la mejor, y cómo hacer que el primero funcione en otras computadoras?


Encontré la manera más limpia de usarlo, esto también permite múltiples versiones de la interoperabilidad, es crear un bin compartido / Office Interop / 11 o 12 / Microsoft.Office.Interop.Excel.dll / y hacer referencia a ellos desde el proyecto, funciona un regalo para la versión diferente


Tampoco veo un problema con su enfoque.

Normalmente, VS generará un conjunto de interoperabilidad para los componentes COM automáticamente cuando agrega una referencia al componente. Sin embargo, cuando agrega una referencia a uno de los componentes de Office (XP o cualquier versión posterior), se agrega una referencia al ensamblado de interoperabilidad primario pregenerado (y optimizado) de Microsoft como en su primer ejemplo. La línea

<WrapperTool>primary</WrapperTool>

significa que se usa esta PIA.

Si agregó correctamente la referencia PIA, la propiedad CopyLocal de esta referencia debe establecerse en falsa y la propiedad Path debería ser algo así como

C:/WINDOWS/assembly/GAC/Microsoft.Office.Interop.Excel/12.0.0.0__71e9bce111e9429c/Microsoft.Office.Interop.Excel.dll

Encontrará más detalles sobre ensamblados de interoperabilidad en este artículo de MSDN.

Para que el primer método funcione, es necesario que los Ensambles de interoperabilidad primarios de Office (PIA) estén instalados en la máquina. Hay una versión redistribuible disponible de Microsoft:

AFAIK, estos PIA solo son instalados por la configuración de Office cuando el .NET Framework ya ha sido instalado, por eso hay una redistribuible separada para los PIA.

Nota: asegúrese de hacer referencia a la versión de Office a la que se dirige. Sin embargo, al orientar varias versiones de Office, es posible que tenga algunos problemas. Una solución en ese caso podría ser la vinculación tardía (si el rendimiento no es un problema).