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?

È stato utile?

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>

scroll top