Написание DLL для Excel в Delphi
Вопрос
Я использую Turbo Delphi 2006.
DLL будет вызываться из Excel как часть комбинации VBA / DLL. Р>
Первая часть проблемы - попытаться выяснить, как передать в DLL ссылку на текущий сеанс Excel. Большинство других кодов, которые я видел, были в том, что они запускали отдельный экземпляр Excel помимо того, в котором вы находитесь.
Я видел некоторый код C ++, который создает экземпляр IDispatch
, а затем передает что-то в метод объекта IDispatch, но не слишком много знает C ++.
Есть идеи?
Решение
То, что вы описываете, называется написанием надстройки COM. Вам необходимо создать DLL-библиотеку автоматизации и реализовать <= > интерфейс. Затем вы получите интерфейс Excel IDTExtensibility2
в качестве параметра для метода Application
.
Вам также необходимо зарегистрироваться ваша DLL как надстройка, поэтому Excel автоматически загрузит ее.
РЕДАКТИРОВАТЬ: забыл упомянуть: вы можете взглянуть на Надстройка Express . Их структура и компоненты позволяют с легкостью приступить к созданию надстроек Office. Вам определенно не придется беспокоиться о деталях OnConnection
. Все это идет с (вполне оправданным) ценником.
Другие советы
Delphi поставляется с набором элементов управления ActiveX, чтобы предоставить полный доступ к Excel и другим приложениям Office. Они должны быть в & Quot; Серверы & Quot; вкладка палитры инструментов.
Если их там нет, выберите Компоненты | Установить пакеты, прокрутите список до самого конца и выберите нужный пакет.
При установке по умолчанию они должны называться:
Компоненты оболочки Microsoft Office Sample Automation Server
и должен быть один для XP и Win2k. XP будут работать для Vista.
Теперь, если вы хотите автоматизировать Excel.
Если вы просто хотите добавить функциональность в Excel с помощью Delphi, я бы предложил использовать объект COM, так как я подозреваю, что Excel очень воспринимает объекты COM. В противном случае вы можете создать прямую DLL и использовать ее так же, как Excel использует любую другую DLL.
Я не очень разбираюсь в Office, но думаю, вам следует использовать COM / ActiveX. Тогда вы также получите свой IDispatch. См. http://delphi.about.com/od/comoleactivex/OLE_A______D_WD_WD_MD а> р>