Scrivere una DLL per Excel in Delphi
Domanda
Sto usando Turbo Delphi 2006.
La DLL verrà chiamata da Excel come parte di una combinazione VBA / DLL.
La prima parte del problema sta provando a scoprire come passare alla DLL un riferimento alla sessione corrente di Excel. La maggior parte degli altri codici che ho visto è che ha lanciato un'istanza separata di Excel oltre a quella in cui ti trovi.
Ho visto del codice C ++ che crea un'istanza di IDispatch
e quindi passa qualcosa a un metodo dell'oggetto IDispatch, ma non conosco molto C ++.
Qualche idea?
Soluzione
Quello che descrivi si chiama scrivere un componente aggiuntivo COM. È necessario creare una DLL di automazione e implementare il codice < > Interfaccia IDTExtensibility2 . Riceverai quindi l'interfaccia Applicazione
di Excel come parametro per il metodo OnConnection
.
Dovrai anche registrati la tua DLL come componente aggiuntivo in modo che Excel la carichi automaticamente.
MODIFICA: Hai dimenticato di menzionare: potresti dare un'occhiata a Add-in Express . Il loro framework e componenti rendono la creazione di addin di Office ridicolmente semplice. Sicuramente non dovrai preoccuparti dei dettagli di IDTExtensibility2
. Tutto ciò viene fornito con un prezzo (ben giustificato), tuttavia.
Altri suggerimenti
Delphi viene fornito con una serie di controlli ActiveX per fornire accesso completo a Excel e alle altre applicazioni di Office. Dovrebbero trovarsi sui "server" scheda della tavolozza degli strumenti.
Se non ci sono, seleziona Componenti | Installa pacchetti e scorri l'elenco fino alla fine, quindi seleziona il pacchetto giusto.
In un'installazione predefinita, dovrebbero essere chiamati:
Componenti wrapper del server di automazione dei campioni di Microsoft Office
e dovrebbe essercene uno per XP e Win2k. Quelli XP funzioneranno con Vista.
Ora che se si desidera automatizzare Excel.
Se si desidera semplicemente aggiungere funzionalità a Excel utilizzando Delphi, suggerirei di utilizzare un oggetto COM, poiché sospetto che Excel stia accettando molto gli oggetti COM. Altrimenti, puoi creare una DLL semplice e utilizzarla nello stesso modo in cui Excel utilizza qualsiasi altra DLL.
Non so molto di Office, ma credo che dovresti usare COM / ActiveX. Quindi ottieni anche il tuo IDispatch. Vedi http://delphi.about.com/_/_C_ a>