Com addin for excel

Summary

Microsoft Office Excel support Automation Add-ins in addition to Component Object Model (COM) Add-ins. This article explains the differences between these two types of Add-ins. 

More Information

COM Add-ins

COM Add-ins present the developer with a way to extend the functionality of Office applications for custom tasks. COM Add-ins are typically used to automate Excel in response to a click of a CommandBar button, a form or dialog box, or some other event specific to Excel such as opening or closing workbooks or entering data on worksheets. COM Add-in functions cannot be directly called from cell formulas in worksheets.

A COM Add-in is an in-process COM server (an ActiveX DLL) that must implement the IDTExensibility2 interface. All COM Add-ins must implement each of the five methods of this interface: OnConnection, OnStartupComplete, OnAddinsUpdate, OnBeginShutDown, and OnDisconnection.

When a COM Add-in is installed on a user’s system, registry entries are created for the Add-in. In addition to normal COM registration, a COM Add-in is registered for each Office application in which it runs. COM Add-ins used by Excel are registered in the following registry key:

                
HKEY_CURRENT_USERSoftwareMicrosoftOfficeExcelAddins

This key contains a subkey for each installed COM Add-in. The name of the subkey is the ProgID for the COM Add-in. The subkey for a COM Add-in also contains values that describe the COM Add-in’s friendly name, description, and load behavior. The load behavior describes how the Add-in is loaded in Excel: loaded at startup, loaded at next startup only, loaded on demand, or not loaded.

 COM Add-ins can also be loaded and unloaded through the Excel user interface. To do this, follow these steps:

  1. On the View menu, point to Toolbars and then click Customize.

  2. In the Toolbars dialog box, click the Advanced tab. In the list of categories, select Tools. Locate COM Add-ins in the list of commands and drag the command to a menu or CommandBar of your choice. Close the Toolbars dialog box.

  3. Click the COM Add-ins command that you added to display the COM Add-ins dialog box. The dialog box lists all COM Add-ins that are installed on your system, and the COM Add-ins that are currently loaded are selected.

COM Add-ins can also be loaded and unloaded through the Excel user interface. To do this, follow these steps:

  1. Click the Microsoft Office Button, and then click Excel Options.

  2. Click Add-Ins.

  3. Under Manage, click COM Add ins, and then click Go .

    The COM Add-ins dialog box lists all COM add-ins that are installed on the computer. The COM add-ins that are currently loaded are selected.

For additional information about COM Add-ins, click the following article numbers to view the articles in the Microsoft Knowledge Base:

238228 HOWTO: Build an Office 2000 COM Add-In in Visual Basic

230689 SAMPLE: Comaddin.exe Office 2000 COM Add-In Written in Visual C++

For more information, see the following Microsoft Web site:

Office Add-ins
http://support.microsoft.com/ofd

Automation Add-ins

In addition to COM Add-ins, Excel supports Automation Add-ins. Automation Add-ins build on COM Add-ins in that functions in Automation Add-ins can be called from formulas in Excel worksheets. COM Add-ins must be in-process COM servers that support the IDTExtensibility2 interface; however, Automation Add-ins can be in-process or out-of-process COM servers and implementation of IDTExtensibility2 is optional.

To use functions from an Automation Add-in in Excel, follow these steps:

  1. On the Tools menu, click Add-Ins.

  2. In the Add-Ins dialog box, click Automation. From the list of registered COM servers, select your Automation Add-in and click OK.

  3. The Automation Add-in appears in the Add-ins dialog box. Click OK to close the Add-Ins dialog box.

To use functions from an Automation Add-in in Excel 2007 and newer, follow these steps:

  1. Click the Microsoft Office Button, and then click Excel Options.

  2. Click Add-Ins.

  3. Under Manage, click Excel Add ins, and then click Go.

  4. In the Add-Ins dialog box, click Automation. In the list of registered COM servers, click your Automation Add-in, and then click OK.

    The Automation Add-in appears in the Add-ins dialog box. Click OK to close the Add-Ins dialog box.

When you make additions to the list in the Add-Ins dialog box or when you select and clear Add-ins in the list, Excel stores your changes in the registry. First, Excel uses the following registry setting to determine whether or not an Automation Add-in in the Add-in list is loaded:

 Excel 2002
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"

Excel 2003
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"
Excel 2007
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice12.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"

Note: Change the Office version number based upon the version you are using.

The /A switch that is used in the string value is new to Excel and older and is used specifically to load Automation Add-ins. All Automation Add-ins are loaded on demand; there is no setting that can change the load behavior for an Automation Add-in.

When an Automation Add-in that is listed in the Add-Ins dialog box is cleared, a subkey with a name equal to the Add-in’s ProgID is created in the following registry key:

HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0ExcelAdd-in Manager
Excel 2003:

HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelAdd-in Manager

HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelAdd-in Manager
This registry setting ensures that Automation Add-ins that you have added to the Add-ins list are retained in the list even when you have chosen not to load them.

For more information about Automation Add-Ins, see the following articles in the Microsoft Knowledge Base:

285337 HOWTO: Create a Visual Basic Automation Add-in for Excel Worksheet Functions

For more information, see the following Microsoft Web site:

Office Add-ins
http://support.microsoft.com/ofd

Automation Add-ins That Implement IDTExtensibility2

As previously mentioned, an Automation Add-in may implement IDTExtensibility2, but it is not required in order for Excel to call the functions in the Add-in from a worksheet. If you require that your Automation Add-in obtains a reference to the Excel instance, you can implement IDTExtensibility2 and use the Application parameter of OnConnection to automate Excel.

An Automation Add-in that implements
IDTExtensibility2 can be loaded in the Excel user interface through both the COM Add-Ins dialog box and the Add-Ins dialog box. The following describes the behavior of an Automation Add-in based on whether it is loaded in one or both of these dialog boxes:

  • Loaded only in the Add-ins dialog box.

    The Add-in is loaded on demand. Functions in the Add-in may be called from formulas in a worksheet.

  • Loaded only in the COM Add-ins dialog box.

    The Add-in is loaded as a COM Add-in and its load behavior is determined from settings in the registry. Functions in the Add-in cannot be called from formulas in a worksheet.

  • Loaded in both the COM Add-ins dialog box and the Add-ins dialog box.

    Two separate instances of the Add-in are loaded. One instance is loaded as a COM Add-in and the other instance is loaded as an Automation Add-in. The COM Add-in instance uses the load behavior indicated in the registry; the Automation Add-in instance loads on demand. The two instances work independently of one another and do not share global variables.

Because Automation Add-ins are loaded on demand, Excel may attempt to load the Add-in while it is in cell edit mode. Therefore, when you develop an Automation Add-in that supports IDTExtensibility2, you should be careful not to do anything that attempts to change Excel’s state while the Add-in loads. For more information, see the following article in the Microsoft Knowledge Base:

284876 BUG: Excel Fails When Automation Add-In Loads

(c) Microsoft Corporation 2001, All Rights Reserved. Contributions by Lori B. Turner, Microsoft Corporation.

Need more help?

Обзор

Microsoft Office Excel поддерживает надстройки автоматизации Кроме надстройки для модели компонентных объектов (COM). В этой статье описаны различия между этих двух типов надстройки.

Дополнительные сведения

Надстройки COM

COM-надстройки предоставить разработчику способ расширить функциональные возможности приложений Office для пользовательских задач. Надстройки COM обычно используются для автоматизации работы в ответ на щелчок кнопки панели команд, формы или диалогового окна или некоторые другие события, относящиеся к Excel, таких как открытие или закрытие книги или ввод данных на листах Excel. Функции надстройки COM не может вызываться непосредственно из формул в ячейках в листах.

COM-надстройка представляет собой сервер COM в процессе (ActiveX DLL), который должен реализовывать интерфейс IDTExensibility2 . Все COM-надстройки должен реализовывать каждый из пяти методов этого интерфейса: OnConnection, OnStartupComplete, OnAddinsUpdate, OnBeginShutDownи OnDisconnection.

Когда COM-надстройка установлена на компьютере пользователя, записи реестра создаются для надстройки. Помимо обычной регистрации COM надстройка COM регистрируется для каждого приложения Office, в котором он работает. Надстройки COM используется Excel зарегистрированы в следующем разделе реестра:

                
HKEY_CURRENT_USERSoftwareMicrosoftOfficeExcelAddins

Этот раздел содержит подраздел для каждого установленного COM-надстройку. Имя подраздела — идентификатор ProgID для надстройки COM. Подраздел для надстройки COM также содержит значения, описывающие COM-надстройки понятное имя и описание и загрузки. Описывает поведение загрузки как надстройка загружается в Excel: загружать при запуске, загружены только, при следующем запуске загружается по требованию или не загружен.

COM-надстройки можно загружать и выгружается посредством пользовательского интерфейса Excel. Чтобы сделать это, выполните следующие действия.

  1. В меню Вид выберите команду панели инструментов и выберите команду Настройка.

  2. В диалоговом окне панели инструментов перейдите на вкладку Дополнительно . В списке категории выберите Сервис. В списке команды найдите COM-надстройки и перетащите нужную команду в меню или панели команд по вашему выбору. Закройте окно инструментов .

  3. Выберите команду надстройки COM , добавленный для отображения в диалоговом окне « надстройки COM ». Диалоговое окно содержит список всех COM-надстройки, которые установлены на вашей системе и надстройки COM, загруженных в настоящий момент выбраны.

COM-надстройки можно загружать и выгружается посредством пользовательского интерфейса Excel. Чтобы сделать это, выполните следующие действия.

  1. Нажмите Кнопку Microsoft Office, а затем нажмите кнопку Параметры Excel.

  2. Нажмите кнопку Надстройки.

  3. В разделе Управлениевыберите команду надстройки COMи нажмите кнопку Перейти .

    В диалоговом окне « надстройки COM » перечислены все COM-надстройки, установленные на компьютере. Надстройки COM, загруженных в настоящий момент выбраны.

Дополнительные сведения о COM-надстройки щелкните следующий номер статьи базы знаний Майкрософт:

Методические УКАЗАНИЯ 238228 : построение Office 2000 надстройки COM в Visual Basic

Образец 230689 : Comaddin.exe Office 2000 надстройки COM в Visual C++

Дополнительные сведения см. ниже на веб-сайте корпорации Майкрософт:

Надстройки Office
http://support.microsoft.com/ofd

Автоматизированные надстройки

В дополнение к COM-надстройки Excel поддерживает сборки надстройки в автоматизации автоматизации которые запускаются добавить на COM-надстройки в том, что функции в автоматизации надстройки могут быть вызваны из формул на листах Microsoft Excel. COM-надстройки должны быть в процесс COM-серверов, которые поддерживают интерфейс IDTExtensibility2 ; Однако надстройки автоматизации может быть в процессе или out-of-process COM-серверов и реализации IDTExtensibility2 является необязательным.

Чтобы использовать функции из надстройки автоматизации Excel, выполните следующие действия:

  1. В меню Сервис выберите команду Надстройки.

  2. Нажмите Автоматизацияв диалоговом окне Надстройки . В списке зарегистрированных серверов COM выберите надстройки автоматизации и нажмите кнопку ОК.

  3. Надстройки автоматизации отображается в диалоговом окне « надстройки ». Нажмите кнопку ОК , чтобы закрыть диалоговое окно Add-Ins .

Чтобы использовать функции из автоматизированных надстроек в Excel 2007 и более поздних версиях, выполните следующие действия.

  1. Нажмите Кнопку Microsoft Office, а затем нажмите кнопку Параметры Excel.

  2. Нажмите кнопку Надстройки.

  3. В разделе Управлениевыберите пункт надстройки Excelи нажмите кнопку Перейти.

  4. Нажмите Автоматизацияв диалоговом окне Надстройки . В списке зарегистрированных серверов COM выберите команду надстройки автоматизации и нажмите кнопку ОК.

    Надстройки автоматизации отображается в диалоговом окне « надстройки ». Нажмите кнопку ОК , чтобы закрыть диалоговое окно Add-Ins .

При внесении дополнения в список в диалоговом окне Надстройки или при выборе и снятии надстройки в списке, Excel сохраняет изменения в реестре. Во-первых Microsoft Excel использует следующий параметр реестра, чтобы определить ли автоматизации надстройки в списке надстройки загружается:

 Excel 2002
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"

Excel 2003
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"
Excel 2007
Key: HKEY_CURRENT_USERSoftwareMicrosoftOffice12.0ExcelOptions
String: OPENx
Sample Value: /A "ServerName.ClassName"

Примечание: Изменение номера версии Microsoft Office на основе версии, которую вы используете.

Параметр /a, используемый в строковое значение старого и нового в Excel и используется специально для загрузки надстройки автоматизации. Все модели автоматизации надстройки загружаются по требованию; Нет нет параметра, можно изменить поведение загрузки надстройки автоматизации.

При снятии надстройки автоматизации, перечисленных в диалоговом окне « Надстройки » подраздел с именем, равным ProgID надстройки создается в следующем разделе реестра:

HKEY_CURRENT_USERSoftwareMicrosoftOffice10.0ExcelAdd-in Manager
Excel 2003:

HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelAdd-in Manager

HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0ExcelAdd-in Manager
Этот параметр реестра гарантирует, что даже в том случае, если вы решили не загружать надстройки автоматизации, которые были добавлены в список надстроек, сохраняются в списке.

Дополнительные сведения об автоматизации надстройки см. ниже статьях базы знаний Майкрософт:

285337 Практическое руководство: создание надстройки автоматизации Visual Basic для функции листа Excel

Дополнительные сведения см. ниже на веб-сайте корпорации Майкрософт:

Надстройки Office
http://support.microsoft.com/ofd

Автоматизированные надстройки, реализующие интерфейс IDTExtensibility2

Как упоминалось ранее надстройки автоматизации может реализовать интерфейс IDTExtensibility2, но это не требуется в порядке для вызова функций в надстройку из рабочего листа Excel. Если требуется надстройки автоматизации получает ссылку на экземпляр Excel, можно реализовать интерфейс IDTExtensibility2 и использовать параметр приложения OnConnection для автоматизации Excel.

Надстройки автоматизации, реализующий
IDTExtensibility2 могут быть загружены в интерфейсе пользователя Excel в диалоговом окне « Надстройки COM » и диалоговом окне « Надстройки ». Ниже описаны поведения автоматизации надстройки на основании она загружается в одном или обоих этих диалоговых окон.

  • Загрузить только в диалоговом окне « надстройки ».

    Надстройка загружается по требованию. Функции надстройки может вызываться из формул на листе.

  • Загрузить только в диалоговом окне « надстройки COM ».

    Надстройка загружается как надстройки COM и его поведение при загрузке определяется на основе параметров в реестре. Функции в окне не может вызываться из формул на листе.

  • Загружен в диалоговом окне « надстройки COM » и диалоговом окне « надстройки ».

    Два отдельных экземпляра надстройки загружаются. Один экземпляр загружается как надстройки COM и другого экземпляра будет загружен в виде надстройки автоматизации. Экземпляр надстройки COM использует режим загрузки указано в реестре; Загружает экземпляр надстройки автоматизации по требованию. Два экземпляра работают независимо друг от друга и не имеют глобальные переменные.

Поскольку надстройки автоматизации загружаются по требованию, Excel может попытаться загрузить надстройку, находящегося в режиме редактирования ячейки. Таким образом при разработке надстройки автоматизации, поддерживающий интерфейс IDTExtensibility2, должен быть осторожны, чтобы не предпринимать попытки изменить состояние программы Excel при загрузке надстройки. Дополнительные сведения см. ниже статьи базы знаний Майкрософт:

Ошибка 284876 : Excel происходит сбой надстройки автоматизации загрузки

(c) Корпорация Майкрософт, 2001, все права защищены. Взносы в Лори б. Тернер, корпорация Майкрософт.

Нужна дополнительная помощь?

В статье описывается процесс создания COM надстройки для Microsoft Excel средствами .NET Framework. Описаны этапы создания настройки, регистрации в системе и управления объектной моделью Excel.

Первым делом добавим к проекту две ссылки:

  • Microsoft.Office.Interop.Excel
  • Extensibility

Заметим, что Microsoft.Office.Interop.Excel имеет несколько версий, при этом главный номер соответствует версии Excel. Например, 11 – это Excel 2003, 12 – Excel 2007 и т.д.. С высокой долей вероятности, сборки взаимодействия для Excel 2007 будут работать и в других версиях, однако не стоит забывать, что различия в функциональности этих сборок все же существуют.

Для создания надстройки необходимо создать класс и реализовать интерфейс ITDExtensibility2. Для последующей регистрации надстройки необходимо пометить класс атрибутом ComVisible(true).

[ComVisible(true)]

public class ComAddin : IDTExtensibility2

{

    private _Application _xlApp;

    public void OnConnection(object application, ext_ConnectMode connectMode,  object addInInst, ref Array custom)

    {

        _xlApp = (_Application) application;

        _xlApp.StatusBar = «Hello,
world»
;

        Debug.WriteLine(«OnConnection»);

    }

    public void OnDisconnection(ext_DisconnectMode removeMode, ref Array custom)

    {

        Debug.WriteLine(«OnDisconnection»);

    }

    public void OnAddInsUpdate(ref Array custom)

    {

        Debug.WriteLine(«OnAddInsUpdate»);

    }

    public void OnStartupComplete(ref Array custom)

    {

        Debug.WriteLine(«OnStartupComplete»);

    }

    public void OnBeginShutdown(ref Array custom)

    {

        Debug.WriteLine(«OnBeginShutdown»);

    }

}

Интерфейс предоставляет 5 методов. OnConnection вызывается
при загрузки надстройки в Excel.
При этом параметр connectMode указывает каким именно образом надстройка была загружена,
при запуске Excel автоматически или
же вручную, путем активации соответствующего флажка в окне надстроек. Интересным
параметром здесь также является application типа object,
который содержит ссылку на объектную модель Excel. Приведение этой переменной к типу _Application позволяет
управлять объектной моделью. В нашем случае, мы изменяем строку состояния и
устанавливаем в нее текст Hello,
world.

_xlApp = (_Application) application;
//Получаем ссылку на объектную модель
Excel,

_xlApp.StatusBar = «Hello, world«;   //изменяем строку состояния.

Метод OnDisconnection вызывается при выгрузки надстройки, т.е. когда
соответствующий флажок снимается в окне надстроек или при закрытии Excel.

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

Метод OnBeginShutdown вызывается при закрытии Excel. Метод OnAddinsUpdate срабатывает при загрузке или выгрузке надстройки в Excel.

Регистрация надстройки

Надстройка готова, теперь необходимо зарегистрировать ее
соответствующим образом. Для этого необходимо выполнить следующие шаги:

  1. Зарегистрировать полученную DLL с помощью
    утилиты
    regasm.exe;
  2. Добавить несколько записей в реестр.

Regasm.exe позволяет
зарегистрировать .NET сборку в качестве COM компонента. В нашем случае будет
зарегистрирован класс ComAddin,
отмеченный атрибутом ComVisible(true).

Необходимо помнить, что Excel бывает как 32-, так и 64-битный.
Таким образом .NET сборку необходимо регистрировать дважды, используя как 32-,
так и 64-битную версию утилиты regasm.exe.

Прежде чем зарегистрировать сборку с помощью этой утилиты, посмотрим
второй пункт. Для того, чтобы Excel понял, что COM компонент представляет собой именно надстройку для Excel, необходимо добавить
новую запись в раздел реестра HKLMSoftwareMicrosoftOfficeExcelAddIns. При этом имя нового раздела совпадает с именем класса,
реализующего надстройку, включая namespace. Автоматизируем этот процесс. Для этого, добавим к
нашему классу два новых статических метода.

[ComRegisterFunction]

private static void Register(Type type)

{

    var path = Registry.LocalMachine.Name + @»SoftwareMicrosoftOfficeExcelAddIns» + type.FullName;

    Registry.SetValue(path, «CommandLineSafe», 0, RegistryValueKind.DWord);

    Registry.SetValue(path, «Description», «This is the
first COM Add-in»
, RegistryValueKind.String);

    Registry.SetValue(path, «FriendlyName», «First COM
Add-in»
, RegistryValueKind.String);

    Registry.SetValue(path, «LoadBehavior», 3, RegistryValueKind.DWord);

}

[ComUnregisterFunction]

private static void Unregister(Type type)

{

    var comAddinsKey = Registry.LocalMachine.OpenSubKey(@»SoftwareMicrosoftOfficeExcelAddIns», true);

    if (comAddinsKey == null)

    {

        return;

    }

    comAddinsKey.DeleteSubKeyTree(type.FullName);

    comAddinsKey.Close();

}

Обратим внимание, что методы отмечены аттрибутами ComRegisterFunction и ComUnregisterFunction. Согласно
документации, методы, отмеченные этими атрибутами будут вызваны при регистрации
сборки с помощью утилиты regasm.exe или
с помощью метода RegistrationServices.RegisterAssembly. При этом
методы должны быть статичными, возвращать тип void и принимать
объект типа Type в качестве единственного аргумента.

Таким образом, метод Register будет вызван при регистрации
сборки с помощью утилиты regasm.exe. Сам метод, в свою
очередь, добавляет новый подраздел в раздел реестра HKLMSoftwareMicrosoftOfficeExcelAddIns, который
содержит информацию о всех COM надстройках.

Registry.SetValue(path, «CommandLineSafe», 0, RegistryValueKind.DWord);

Registry.SetValue(path, «Description»«This is the first COM Add-in»RegistryValueKind.String);

Registry.SetValue(path, «FriendlyName»«First COM Add-in»RegistryValueKind.String);

Registry.SetValue(path, «LoadBehavior», 3, RegistryValueKind.DWord);

Ключ FriendlyName содержит имя надстройки, а ключ Description – его описание. Здесь можно
указать любой текст. Наиболее интересным является ключ LoadBehavior, который указывает способ
загрузки надстройки в Excel.
Этот ключ имеет несколько возможных значений, однако наиболее интересными
являются значения 2 и 3. В первом случает надстройка не будет загружена в Excel при запуске, во втором – будет.
Установим этот ключ в значение 3 для того чтобы загружать надстройку каждый раз
при запуске Excel
автоматически. Заметим, что LoadBehavior является единственным обязательным ключом. В случае его отсутствия, надстройка не будет загружена в Excel и также не будет доступна для загрузки в окне Add-ins.

Метод Unregister,
отмеченный атрибутом ComUnregisterFunction,
соответственно, удаляет информацию о надстройке из списка, таким образом в Excel она
доступна не будет. Метод будет вызван при вызове утилиты regasm.exe с ключом /unregister.

Соберем проект и пробуем зарегистрировать полученную сборку.
Для удобства, создадим в папке с надстройкой .bat файл со следующими командами

C:WindowsMicrosoft.NETFrameworkv4.0.30319regasm.exe «%~dp0ComAddin.dll» /codebase
C:WindowsMicrosoft.NETFramework64v4.0.30319regasm.exe «%~dp0ComAddin.dll» /codebase
pause

Ключ /codebase
указывает на то, что необходимо добавить полный путь к сборке в реестр. В
противном случае, если ключ не указан, сборка будет также успешно
зарегистрирована, однако при последующем запуске Excel он попытается найти сборку в GAC. В результате надстройка
не будет загружена, потому что ее просто нет в GAC.

Соответственно, если сборка предварительно добавлена в GAC, ключ /codebase необходимо
опустить.

Сразу заметим, что для регистрации сборки необходимы права администратора. Если вы работаете под обычным пользователем, необходимо запускать скрипт от имени администратора.

Для удаления надстройки, необходимо использовать ключ /unregister. При этом скрипт
принимает следующий вид.

C:WindowsMicrosoft.NETFrameworkv4.0.30319regasm.exe «%~dp0ComAddin.dll» /unregister

C:WindowsMicrosoft.NETFramework64v4.0.30319regasm.exe «%~dp0ComAddin.dll» /unregister

pause

После вызова скрипта имеем следующее

Сборка зарегистрирована успешно, однако regasm.exe указывает на отсутствие подписи у сборки. В данном случае проигнорируем это предупреждение.
После регистрации в реестре создан новый раздел.

Запускаем Excel. В строке состояния видим ‘Hello, world’, что свидетельствует о том, что надстройка была успешно загружена.

Откроем окно надстроек

При этом видим, что имя и описание надстройки имеют значения, добавленные ранее в реестр, а сама надстройка расположена в группе “Active Application Add-ins”, т.е. является активной.

Отладка

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

После чего запускаем отладчик. При этом в окне Output в Visual Studio видим последовательность вызова методов класса.

С исходниками и готовой сборкой можно ознакомиться тут.

  • Download source files — 277 Kb
  • Download demo project — 754 Kb

Sample Image - ExcelFeed.gif

Introduction

COM add-ins present the developer with a way to extend the functionality of Office 2000 and Office XP applications for custom tasks. COM add-ins are typically used to automate Excel in response to a click of a CommandBar button, a form or dialog box, or some other event specific to Excel such as opening or closing workbooks or entering data on worksheets.

Microsoft Office 2000 and later support a new, uniform design architecture for building application add-ins to enhance and control Office applications. These add-ins are called COM add-Ins. This article will demonstrate how to build a COM Add-In using Visual Basic.

In Microsoft Excel 2000, you cannot call a function directly in a Component Object Model (COM) add-in from a worksheet cell formula. Instead, you must create a Visual Basic for Applications (VBA) wrapper for the COM Add-in function so that the function can be called indirectly. Integration of COM add-ins (called automation add-ins) in Excel 2002 has been enhanced such that COM add-in functions may now be called directly from a worksheet formula without the need for a VBA wrapper.

We want to use the power of Excel to visualize historical and online data from some tables in Excel cells and graphics. In that way, we will be possible to compute online a lot of column, to add calculations, to add graphs and computing fields, to look online at graphics changes. Using the Excel, all data will be kept in your worksheet!

Because the transferring of that data from SQL tables to Excel client is completed over the Internet, I choose the ISAPI extension DLL to be the HTTP provider of feed. In fact, the Excel COM add-in will make requests at equal time intervals to the ISAPI extension DLL. The ISAPI will interrogate the SQL database, will format the data and will put that data to the HTTP stream. The Excel COM add-in will receive that formatted data and will fill its cells and graphs with updated values!

Advantages

  • Obtain directly the data from the server database in your Excel worksheet. No web pages or download files are needed !!!
  • In that way, it is possible to implement in your worksheet more calculations, computed fields, graphs based on primary data.
  • It is possible to easy distribute the ExcelFeed client program to your clients.
  • Using the ISAPI the web server is freed by the calls from clients.
  • ISAPI extension DLLs are the best choice if you want to obtain the maximum number of simultaneous connections to IIS web server or to provide huge quantities of HTML data.

Functionality

In order to start the client ExcelFeed application, launch the installation Setup.exe program and follow the wizard. After a successful installation, open the Excel program. You will find a new «Excel Real Feed» toolbar inside!

Image 2

Click on the «RealFeed» button of the Excel Real Feed menu. A new book will be opened and the «Login» option will be activated. Click on the «Login» button of the Excel Real Feed menu.

The «Main switchboard» dialog box will appear. Choose a country provider from the «Country» combo box, put user «andi» and password «andi» and click on the «Login» button. The «GetIndices» and «GetTickers» buttons will be activated.

Image 3

After a click to «GetIndices« button, the «IndicesHistory» dialog box will appear. The Tickers module and functionality are the same like that with indices. On the left side of the dialog box is the History module. After a click on «GetIndicesHistory», in the worksheet will appear historical data for IdIndex. Also a history graph is provided.

Image 4

On the right side of dialog box is the Portfolio module. After a click on «GetIndicesPortfolio», in the worksheet will appear online data for all indices. Here it is possible to obtain 3 types of graphs: the pie graph and intraday graph are in the same worksheet. An image sample is available on the top of this article.

The historical intraday graphs are provided for all indices in a separate worksheet. If we click on the «Lauch Real Feed» checkbox on the IndicesHistory or TickersHistory forms, the program will look 30 min at each 60s at the GetOnlineIndices method of the ISAPI server.

http://localhost/ArticleExcelFeed/IsapiExcelFeed.dll?GetOnlineIndices?

Image 5

Developing

A COM add-in is an in-process COM server (an ActiveX DLL) that must implement the IDTExensibility2 interface. All COM add-ins must implement each of the five methods of this interface: OnConnection, OnStartupComplete, OnAddinsUpdate, OnBeginShutDown, and OnDisconnection.

When a COM add-in is installed on a user’s system, registry entries are created for the add-in. In addition to normal COM registration, a COM add-in is registered for each Office application in which it runs. COM add-ins used by Excel are registered in the following registry key:

HKEY_CURRENT_USERSoftwareMicrosoftOfficeExcelAddins

This key contains a sub-key for each installed COM add-in. The name of the sub-key is the ProgID for the COM add-in. The sub-key for a COM add-in also contains values that describe the COM add-in’s friendly name, description, and load behavior. The load behavior describes how the add-in is loaded in Excel: loaded at startup, loaded at next startup only, loaded on demand, or not loaded.

COM add-ins can also be loaded and unloaded through the Excel user interface. To do this, follow these steps:

  1. On the View menu, point to Toolbars and then click Customize.
  2. In the Toolbars dialog box, click the Advanced tab. In the list of categories, select Tools. Locate COM Add-ins in the list of commands and drag the command to a menu or CommandBar of your choice. Close the Toolbars dialog box.
  3. Click the COM Add-ins command that you added to display the COM Add-ins dialog box. The dialog box lists all COM add-ins that are installed on your system, and the COM add-ins that are currently loaded are selected.

Steps to cCreate the COM add-in

  1. Start a new AddIn project in Visual Basic 6.0.
  2. Add a reference to Microsoft Office 9.0 and Microsoft Excel 9.0 object libraries.
  3. On the Project Explorer, open the Forms folder, and then remove frmAddin from the project.
  4. On the Project Explorer, open the Designers folder, and then double-click the Connect Addin Designer.
  5. On the General tab of the designer, change the Application to Microsoft Excel, and then change the Initial Load Behavior to Startup.
  6. On the View menu, click Code.
  7. Replace all of the code in the Connect code module with your code (see the sample VB project).
  8. On the File menu, click Make MyAddIn.dll to build the COM add-in.

The COM add-in is registered for use with Microsoft Excel when you build it. Since you specified Startup for the Initial Load Behavior, the COM add-in automatically loads when you start Microsoft Excel.

To make HTTP calls, I use a HTTP retrieve component, which have the possibilities to make asynchronous calls. This are needed to not block the user when the program wait for HTTP response. The full code of that component is included. A description of how to work with that component is also provided in the following article: Discover WIN32. How to use a sync/async retrieve HTTP content in your ASP & VB projects.

Set myORetrieve = CreateObject("RetrievePage.RetrievePage.1")
Dim str As String
str = myORetrieve.RetrieveAsync(urlIndicesHistory)



If str = "ok" Then
    
    TimerIndexHistory.Interval = 1000
End If



Private Sub TimerIndex_Timer()
    Dim str As String
    Dim lRetrieveAsyncCompleted As Long

    
    Message.Caption = "Loading Data..."
    lRetrieveAsyncCompleted = _
      myORetrieve.RetrieveAsyncCompleted(urlIndicesPortfolio)

    If lRetrieveAsyncCompleted = 1 Then
        str = myORetrieve.RetrieveAsyncPage(urlIndicesPortfolio)
        TimerIndex.Interval = 0
        Message.Caption = ""
        
        ParsePortfolio (str)
    End If

    If lRetrieveAsyncCompleted = -1 Then
        TimerIndex.Interval = 0
        Message.Caption = "Wrong URL"
    End If
End Sub

The ISAPI extension DLL is the best choice for HTTP feed, regarding at the speed , number of requests per second and number of simultaneous connections.

At each HTTP hit, the ISAPI module makes request again to the SQL database, using the CAdoDatabase and CAdoRecordset classes from CodeProject site :). The minor modification was to keep only database connection as public variable.

On each method the record sets needed are opened and closed. An optimization is the using of GetString method of AdoRecordset class, which returns directly a formatted data text. The ISAPI connection string is located in IsapiDemoFeed.cpp file, on the constructor:

m_bstrConnectionString="Provider=SQLOLEDB;Data Source=andi;Initial 
Catalog=ArticlesExcelFeed;
User ID=sa;Password=;";

More about how to use the ISAPI extension DLL like a HTTP feed provider can be found at Discover ISAPI. Feed provider for graphical applets.

The SQL database (ArticlesExcelFeed) is simple and contain only few tables and views. It is possible to use an Access MDB file with the same structure.

If we click on the Lauch Real Feed checkbox on the IndicesHistory or TickersHistory forms, the program will look 30 min at each 60s at the GetOnlineIndices method of the ISAPI server.

http://localhost/ArticleExcelFeed/IsapiExcelFeed.dll?GetOnlineIndices?

If the data in the tblOnlineIndices or tblOnlineTickers are changed in that interval of time, we will obtain online data that’s changed in our IndicesPortfolio (TickersPortfolio) worksheet cells and IndicesCharts (TickersCharts) charts.

Installation

  • The ISAPI connection string is located in IsapiExcelFeed.cpp file, on the constructor:
    m_bstrConnectionString=_
        "Provider=SQLOLEDB;Data Source=andi;" + _
        "Initial Catalog=ArticlesExcelFeed;" + _
        " User ID=sa;Password=;"; 
  • Create a folder ArticleExcelFeed under your web site, and copy inside the IsapiExcelFeed.dll.
  • Give Scripts and Executables execute permission to IsapiExcelFeed directory web application. In that way the IIS web server will be able to execute the IsapiExcelFeed.dll.
  • To install the database on your SQL server select restore database option on SQL Server Enterprise Manager and choose the DB/ArticlesExcelFeed.bak file backup. The name of database is ArticlesExcelFeed.
  • In order to use the Excel COM add-in on a client computer, we need the RetrievePage component. Use on the client computer regsvr32 RetrievePage.dll command from DOS prompt.
  • To install the Excel COM add-in on a client computer, compile the VB project with File->Make ComExcelFeed.dll… option and launch the Excel program. It is possible to just use the regsvr32 ComExcelFeed.dll command from DOS prompt. A new toolbar named «» will be created in your Excel program.
  • It is possible to implement an install program like that which is provided to automatically install the Excel client on the needed computers.

The demo application

To install the demo application just launch the ExcelFeedDemo setup.exe program and launch Excel. (use andi/andi as user/password).

Links

  • Discover ISAPI. Feed provider for graphical applets.
  • Discover WIN32. How to use a sync/async retrieve HTTP content in your ASP & VB projects.

Starting with V6R1 System i Access for Windows, the Excel data transfer add-in no longer uses Excel SDK. The newer Excel 2007 limits are not supported in the old SDK. The V6R1/V7R1 Excel data transfer add-in uses the Component Object Model (COM) instead of SDK. COM is the interoperability standard for Windows-based applications and allows users to upload data from many Excel instances simultaneously.

When installing the COM-based Excel data transfer add-in, CWBTFCAI.DLL is used instead of CWBTFXLA.XLL.

Following are instructions for installing the COM-based Excel data transfer add-in. Data transfer can identify which Excel version is installed and set the corresponding limits.

Excel 2002/2003 Loading the COM-based Add-in

1. On the View menu, select Toolbars -> Customize…:

This picture shows the menu options used to load the COM-based add-in.

2. Click the Commands tab and under Categories, click Tools.

This picture shows the options available when selecting the customize option in the previous picture.

3. Under the Commands tab, click COM Add-Ins… and drag your selection to the Excel toolbar:

This picture shows the COM Add-in option.

4. Click COM Add-Ins on the toolbar and select Data Transfer Excel Add-in:

This picture shows the COM Add-in Data Transfer Excel Add-in.

5. If the Data Transfer Excel Add-in does not appear in the COM Add-ins list, do the following:

a) Click Add (see previous screen).
b) Browse to the folder where you installed System i Access for Windows (default path C:Program FilesIBMClient AccessShared).
c) Double-click the Shared folder.
d) Double-click cwbtfcai.dll.

Excel 2002/2003 Removing COM-Based Add-In

To unload the data transfer add-in (keeps name in the list), clear the box for the Data Transfer Excel Add-in and select OK.

To remove the data transfer add-in (removed from list), select the box for the Data Transfer Excel Add-in and select Remove:

This picture shows how to remove the COM add-in Data Transfer Excel Add-in.

Excel 2007/Excel 2010: Load COM-Based Add-in

Note: Data transfer is a 32-bit application and will not work with the 64-bit version of Excel 2010 until 64-bit support was added starting with i Access for Windows V7R1 service pack SI42424. No Excel data transfer add-in 64-bit support is planned for earlier versions of the client.

Also, Excel 2013 is not supported. This includes Office 365 which has been upgraded to Office 2013. To view the support statement and some circumventions when using Excel 2013 see technote N1019966 IBM i Access for Windows Data Transfer and Excel 2013.

1. Select the Quick Access toolbar in the upper left corner of the Excel session when using Excel 2007:

This picture shows the Excel 2007 Quick Access toolbar.

When using Excel 2010, click on File and then Options to take you to the Excel Options window where you can select Add-ins (shown in point 3 below).

2. Select Excel Options when using Excel 2007:

This picture shows the Excel Options button that will show the Add-ins option.

3. Select Add-Ins:

This picture shows the Add-ins option that can be selected for the list on the left.

4. From the Manage list, select COM Add-ins and then select Go…:

This picture shows the COM Add-ins option under the Manage drop down options.

5. Select Data Transfer Excel Add-in:

This picture shows the COM Add-ins Data Transfer Excel Add-in.

6. If Data Transfer Excel Add-in is not listed, do the following:

a) Select Add (see previous screen).
b) Browse to the folder where you installed System i Access for Windows.
c) Double-click the Shared folder.
d) Double-click cwbtfcai.dll.

Note: When using a Windows 64-bit operating system such as Windows 7 64-bit, the path by default will be Program Files(x86)IBMClient Access. If using Office 2007 or Office 2010 32-bit, select the Shared directory under Client Access. If using Office 2010 64-bit, select the Shared64 directory. Then select cwbtfcai.dll. A minimum of System i Access V7R1 with service pack SI42424 is needed if using Office 2010 64-bit.

Browsing for the data transfer add-in per item b) above:

This picture shows the Windows path to the Data Transfer Add-in if it is not in the previous list.

7. The data transfer add-in download and upload options will then be shown under the Add-ins drop down menu or tab in Excel 2007/2010.

This picture shows where the add-in icons reside in Excel.

Unloading the COM based Excel Add-in

To unload the data transfer add-in from Excel do the following:

1. Select the Quick Access toolbar.
2. Select Excel Options.
3. Select Add-ins.
4. In the Manage list, select COM Add-ins and click Go.
5. Clear the checkbox associated with Data Transfer Excel Add-in.
6. Select OK.

This picture shows how to unload the COM Add-ins Data Transfer Excel Add-in.

Removing the COM-Based Excel Add-in

1. Select the Quick Access toolbar.
2. Select Excel Options.
3. Select Add-ins.
4. In the Manage list, select COM Add-ins and select Go.
5. Highlight the checked Data Transfer Excel Add-in.
6. Select the Remove button.

This picture shows how to remove the COM Add-ins Data Transfer Excel Add-in.

Понравилась статья? Поделить с друзьями:
  • Com add in word
  • Combine names to make a new word
  • Columns with numbers in excel
  • Combine lines in word
  • Columns with microsoft word