Вопрос

Я использую 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 а>

scroll top