Pregunta

Estoy usando Turbo Delphi 2006.

Se llamará a la DLL desde Excel como parte de una combinación VBA / DLL.

La primera parte del problema es tratar de descubrir cómo pasar a la DLL una referencia a la sesión actual de Excel. La mayoría del otro código que he visto fue que lanzó una instancia separada de Excel aparte de la que estás usando.

He visto un código C ++ que crea una instancia de IDispatch y luego pasa algo a un método del objeto IDispatch, pero sin saber mucho C ++.

¿Alguna idea?

¿Fue útil?

Solución

Lo que describe se llama escribir un complemento COM. Debe crear una DLL de automatización e implementar el IDTExtensibility2 interfaz. Luego recibirá la interfaz Excel Application como parámetro del método OnConnection .

También deberá registrarse su DLL como un complemento para que Excel lo cargue automáticamente.

EDITAR: Olvidé mencionar: es posible que desee echar un vistazo a Complemento Express . Su marco y componentes hacen que comenzar a crear complementos de Office sea ridículamente fácil. Definitivamente no tendrá que molestarse con los detalles de IDTExtensibility2 . Sin embargo, todo lo que viene con una etiqueta de precio (bien justificada).

Otros consejos

Delphi viene con un conjunto de controles ActiveX para dar acceso completo a Excel y las otras aplicaciones de Office. Deben estar en los "Servidores" pestaña de la paleta de herramientas.

Si no está allí, seleccione Componentes | Instalar paquetes, y desplácese hacia abajo en la lista hasta el final, y seleccione el paquete correcto.

En una instalación predeterminada, deberían llamarse:

Componentes de contenedor de Microsoft Office Sample Automation Server

y debería haber uno para XP y Win2k. Los XP funcionarán para Vista.

Ahora que si quieres automatizar Excel.

Si simplemente desea agregar funcionalidad a Excel usando Delphi, le sugiero que use un objeto COM, ya que sospecho que Excel acepta mucho los objetos COM. De lo contrario, puede crear una DLL directa y usarla de la misma manera que Excel usa cualquier otra DLL.

No sé mucho sobre Office, pero supongo que debería usar COM / ActiveX. Entonces también obtienes tu IDispatch. Consulte http://delphi.about.com/od/comoleactivex/OLE_COM_DCph__ut_htm. a>

scroll top