Надстройки автоматизации, как правило, не предназначены для обработки таких функций. Ваша надстройка может реализовать IDTExtensibility2, чтобы получить ссылку на объект Excel.Application, в котором работает ваша надстройка. Отсюда вы можете получить доступ ко всем событиям класса Excel.Application. Но надстройка автоматизации обычно не предназначена для обработки событий объектной модели Excel - она предназначена только для поддержки пользовательских функций (UDF).
Я хочу выполнить проверку имени пользователя и пароля во время загрузки надстройки автоматизации, для чего при загрузке надстройки должен появиться экран, на котором пользователь может ввести свои данные. Как это можно сделать с помощью надстройки автоматизации?
Остерегайтесь попыток предпринять какие-либо действия при первой загрузке надстройки автоматизации. Надстройка автоматизации загружается по запросу, что означает, что она не загружается, пока она не понадобится Excel. Обычно он загружается, когда пользователь начинает вводить первую определяемую пользователем функцию (UDF) вашей надстройки автоматизации в ячейку. Проблема в том, что большинство программных команд не будут выполнены при попытке выполнения, пока пользователь все еще редактирует ячейку. Следовательно, если вы попытаетесь предпринять такие действия при первой загрузке надстройки, весьма вероятно, что она загружается, когда Excel находится в режиме, который не позволяет вашему коду безопасно выполняться. (Подробнее об этом см .: Ошибка Excel при загрузке надстройки автоматизации.)
Чтобы обойти эту проблему, вместо этого можно использовать управляемую надстройку COM, которая предназначена для обработки событий объектной модели Excel. Ваша управляемая надстройка COM может даже загрузить вашу надстройку автоматизации, если вы захотите; либо управляемый класс надстройки COM и класс надстройки автоматизации могут находиться в одной сборке, и в этом случае они могут взаимодействовать напрямую.
Как вообще можно выполнять обработку событий с помощью надстроек автоматизации? Я хочу, чтобы некоторые вычисления выполнялись, когда пользователь нажимает F9 для вычисления формулы udf в некоторых ячейках.
Обнаружение нажатия клавиши F9 может быть выполнено путем подписки на событие «Excel.Application.SheetCalculate», которое будет срабатывать каждый раз, когда любой рабочий лист завершит вычисление. Расчет в этом случае может быть запущен по любой причине, а не только по нажатию клавиши F9. Если вы хотите специально перехватить клавишу F9, вам нужно будет использовать обратный вызов Application.OnKey, который доступен только через VBA. Однако вы можете предоставить класс в своем проекте для COM и вызвать его из надстройки VBA, которая вызывается из события Application.OnKey.
Статьи о надстройках автоматизации см .:
Статьи об управляемых надстройках COM см .:
Статьи о надстройках COM и надстройках автоматизации см .:
Статьи, в которых обсуждается использование надстройки VBA, которая вызывает ваше управляемое приложение, см. В следующих статьях:
Я знаю, что это нужно переварить, но, надеюсь, это поможет вам в этом. В целом, я бы порекомендовал управляемую надстройку COM для обработки функций вашего пользовательского интерфейса. Данные, сохраненные управляемой надстройкой COM, можно было бы легко использовать совместно с надстройкой автоматизации, либо если обе надстройки ссылаются на общую сборку, либо имея как управляемый класс надстройки COM, так и надстройку автоматизации. в классе проводится в рамках одного собрания.
Я надеюсь, что это поможет, и, пожалуйста, спросите, не хотите ли вы, чтобы я уточнить что-нибудь еще.
- Майк
Дополнительный ответ:
Большое спасибо за ссылки и указатели. Я прошел по ссылкам и четко представляю, что нужно делать. :)
Рад, что это помогло. :) Читаю много, предлагаю распечатать и все прочитать. Вы хотите сделать что-то достаточно продвинутое, поэтому чем больше вы знаете о теме, тем лучше для вас будет.
Если я использую надстройку на основе COM для обработки событий Excel, как мне включить свои функции UDF?
Управляемая надстройка COM не может предоставлять функции UDF. Для этого вам все равно понадобится надстройка автоматизации. Однако ваш управляемый класс надстройки COM и ваш класс надстройки автоматизации могут находиться в одной сборке, если хотите. Таким образом, ваша надстройка COM может запрашивать у пользователя необходимую информацию, и эти значения будут доступны надстройке автоматизации при запуске внутри нее пользовательских функций.
Будут ли они отображаться как обычные функции на панели формул, как в случае использования надстройки автоматизации?
Пользовательские функции, предоставляемые вашей надстройкой автоматизации, будут автоматически включены в мастер «Вставить функцию» в категорию, соответствующую имени вашей надстройки автоматизации. Однако описание не будет автоматически включать столько информации, сколько предоставляется для встроенных функций Excel. Функциональность по умолчанию обычно хороша, но если вы хотите предоставить более полную информацию для мастера «Вставить функцию», это сложная тема сама по себе. См .: Excel 2007 UDF: как добавить описание функции, помощь аргумента.
Скажем, мне нужно вызвать формулу getcube, которая возвращает куб числа public double getcube (double a) {return a * a * a; }
Когда моя надстройка использует как настраиваемый интерфейс, определяющий мои UDF, так и IDTExtensibility2, как мне справиться с таким случаем? Не могли бы вы объяснить этот случай на примере?
Пока я не вижу необходимости внедрять IDTExtensibility2 на основе того, что вы здесь показываете, вам нужна только стандартная надстройка автоматизации. Для стандартной надстройки автоматизации вы должны прочитать Запись, определяемая пользователем функции для Excel в .NET и Написание пользовательских функций рабочего листа Excel на C #. Для обсуждения того, как реализовать IDTExtensibility2 для управляемой надстройки COM, см. Реализация IDTExtensibility2 в надстройке автоматизации.
Есть ли способ просто реализовать IDTExtensibility2 в надстройке автоматизации, чтобы получить доступ к объекту Excel.Application, или мне следует создать для него отдельную надстройку COM?
Вы абсолютно можете реализовать IDTExtensibility2 непосредственно в своей надстройке автоматизации, для этого нет необходимости создавать управляемую надстройку COM. Опять же, см. Реализация IDTExtensibility2 в надстройке автоматизации а>. Однако вы хотите использовать обработку событий для объектной модели Excel. Хотя это можно сделать с помощью надстройки автоматизации, это нестандартно и не является той задачей, для которой надстройка автоматизации предназначена. В частности, вы хотите, чтобы пользователь вводил информацию при первой загрузке надстройки автоматизации; это может быть особенно сложной ситуацией, поэтому я рекомендую вам использовать управляемую надстройку COM для этой задачи. Подробнее об этом см. В разделе Ошибка Excel при загрузке надстройки автоматизации.
Чтобы уточнить, управляемые надстройки COM и надстройки автоматизации - это просто классы, которые были сделаны видимыми для COM и правильно зарегистрированы. Нет причин, по которым эти два класса не могут существовать в одной сборке. И поскольку кажется, что вы хотите, чтобы ваша функциональность включала как UDF, так и обработку событий объектной модели Excel, единая сборка, включающая как управляемую надстройку COM, так и надстройку автоматизации, позволит вам обрабатывать все функции, которые вы ищете. так, как ожидает Excel.
Я знаю, что это много для переваривания, но если вы внимательно прочитаете статьи, которые я предлагал здесь, я думаю, что это будет иметь смысл ...
Майк
person
Mike Rosenblum
schedule
04.01.2010