Escrevendo uma DLL para o Excel em Delphi
Pergunta
Eu estou usando Turbo Delphi 2006.
A DLL será chamado de dentro do Excel como parte de uma combinação VBA / DLL.
A primeira parte do problema é tentar descobrir como passar para a DLL uma referência para a sessão atual do Excel. A maioria outro código que eu vi foi que ele lançou uma instância separada do Excel para além do que você está dentro.
Eu vi algum código C ++ que cria uma instância de IDispatch
e, em seguida, passa algo para um método do objeto IDispatch, mas não saber muito C ++.
Todas as idéias?
Solução
O que você descreve é ??chamado escrevendo um suplemento COM. Você precisa criar uma DLL de automação e implementar o IDTExtensibility2
interface. Você vai então receber a interface Application
Excel como um parâmetro para o método OnConnection
.
Você também precisará registar a DLL como um suplemento tão Excel irá carregá-lo automaticamente.
EDIT: esqueci de mencionar: Você pode querer dar uma olhada em Add-in Express . Sua estrutura e componentes fazem começar com a criação de suplementos Escritório ridiculuously fácil. Você definitivamente não terá que se preocupar com os detalhes da IDTExtensibility2
. Tudo o que vem com um (bem justificado) etiqueta de preço, no entanto.
Outras dicas
Delphi vem com um conjunto de controles ActiveX para dar acesso completo para o Excel e outros aplicativos do Office. Eles devem estar na guia "Servidores" da paleta de ferramentas.
Se o não estão lá, em seguida, selecione Componentes |. Instalar Pacotes, e role para baixo a lista de lá até o fim, e selecione o pacote certo
Em uma instalação padrão, que deve ser chamado:
Sample Microsoft Office Automation Server Wrapper Componentes
e deve haver um para XP e Win2k. Os XP irá trabalhar para Vista.
Agora que se se você quiser automatizar o Excel.
Se você simplesmente deseja adicionar funcionalidade para o Excel usando Delphi, eu sugiro usar um objeto COM, como eu suspeito que o Excel é muito aceitar de objetos COM. Caso contrário, você pode criar uma DLL em linha reta, e o uso que da mesma forma que o Excel usa qualquer outro DLL.
Eu não sei muito sobre o Office, mas eu acho que você deve usar COM / ActiveX. Então você também obter o seu IDispatch. Consulte http://delphi.about.com/od/comoleactivex/OLE_COM_DCOM_Automation_ActiveX_Delphi_knowledge_base.htm