Написание DLL для Excel в Delphi - PullRequest
0 голосов
/ 05 декабря 2008

Я использую Turbo Delphi 2006.

DLL будет вызываться из Excel как часть комбинации VBA / DLL.

Первая часть проблемы - попытка выяснить, как передать в DLL ссылку на текущий сеанс Excel. Большинство других кодов, которые я видел, были в том, что они запускали отдельный экземпляр Excel помимо того, в котором вы находитесь.

Я видел некоторый код C ++, который создает экземпляр IDispatch и затем передает что-то в метод объекта IDispatch, но не слишком много знает C ++.

Есть идеи?

Ответы [ 3 ]

7 голосов
/ 06 декабря 2008

То, что вы описываете, называется написанием надстройки COM. Вам необходимо создать DLL-библиотеку автоматизации и реализовать интерфейс IDTExtensibility2. Затем вы получите интерфейс Excel Application в качестве параметра для метода OnConnection.

Вам также нужно будет зарегистрировать свою DLL в качестве надстройки, чтобы Excel автоматически загрузил ее.

РЕДАКТИРОВАТЬ: Забыл упомянуть: Вы можете взглянуть на Надстройка Express . Их структура и компоненты позволяют с легкостью приступить к созданию надстроек Office. Вам определенно не придется беспокоиться о деталях IDTExtensibility2. Однако все это идет с (вполне оправданным) ценником.

3 голосов
/ 06 декабря 2008

Delphi поставляется с набором элементов управления ActiveX, чтобы предоставить полный доступ к Excel и другим приложениям Office. Они должны находиться на вкладке «Серверы» палитры инструментов.

Если их там нет, выберите Компоненты | Установить пакеты, прокрутите список вниз до самого конца и выберите нужный пакет.

При установке по умолчанию они должны называться:

Компоненты оболочки Microsoft Office Sample Automation Server

и должен быть один для XP и Win2k. XP будут работать для Vista.

Теперь, если вы хотите автоматизировать Excel.

Если вы просто хотите добавить функциональность в Excel с помощью Delphi, я бы предложил использовать объект COM, так как я подозреваю, что Excel очень воспринимает объекты COM. В противном случае вы можете создать прямую DLL и использовать ее так же, как Excel использует любую другую DLL.

0 голосов
/ 05 декабря 2008

Я не очень разбираюсь в Office, но думаю, вам стоит использовать COM / ActiveX Тогда вы также получите свой IDispatch. Смотри http://delphi.about.com/od/comoleactivex/OLE_COM_DCOM_Automation_ActiveX_Delphi_knowledge_base.htm

...