2008-12-05 6 views
0

Я использую Turbo Delphi 2006.Написание DLL для Excel в Delphi

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

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

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

Любые идеи?

ответ

7

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

Вам также понадобится register вашей DLL в качестве дополнения, так что Excel автоматически загрузит его.

EDIT: Забыл (а): Вы можете взглянуть на Add-in Express. Их структура и компоненты делают начало с созданием аддонов Office смехотворно легкими. Вам определенно не придется беспокоиться о деталях IDTExtensibility2. Тем не менее, все, что связано с (обоснованным) ценой.

3

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

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

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

Microsoft Office Sample Компоненты сервера автоматизации Wrapper

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

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

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