Escribir una DLL para Excel en Delphi
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?
Solución
Lo que describe se llama escribir un complemento COM. Debe crear una DLL de automatización e implementar el 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>