Расширение надстройки и надстройка COM

Я новичок с программированием надстройки и нуждаюсь в помощи по следующему сценарию:

У меня есть надстройка автоматизации C # Excel, которая вызывает несколько UDF . Я хочу выполнить проверку имени пользователя и пароля во время загрузки нагрузки надстройки надстройки, для которой экран, в который пользователь может ввести свои данные, должен появиться при загрузке надстройки. Как это сделать, используя надстройку автоматизации?

Как можно обрабатывать события в целом с помощью добавок автоматизации? Я хочу, чтобы некоторые вычисления выполнялись, когда пользователь нажимает F9 для вычисления формулы UDF в некоторых ячейках.

Существуют ли какие-либо статьи, объясняющие обработку событий в надстройках автоматизации?

    Усовершенствования автоматизации, в общем, не предназначены для работы с такими функциями. У вас есть надстройка IDTExtensibility2, чтобы получить ссылку на объект Excel.Application, в котором работает надстройка. Оттуда вы можете получить доступ ко всем событиям класса Excel.Application. Но надстройка автоматизации обычно не предназначена для обработки событий объектной модели Excel – она ​​предназначена для поддержки только определенных пользователем функций (UDF).

    Я хочу выполнить проверку имени пользователя и пароля во время загрузки загрузочных устройств автоматизации, для которых экран, в который пользователь может ввести свои данные, должен появиться при загрузке добавления. Как это можно сделать с помощью добавления автоматизации?

    Остерегайтесь попыток предпринять действия, когда ваша надстройка автоматизации сначала загрузится. Надстройка автоматизации загружается по требованию, что означает, что она не загружается до тех пор, пока она не понадобится Excel. Обычно он загружается, когда пользователь начинает вводить первую пользовательскую функцию (UDF) вашей надстройки автоматизации в ячейку. Проблема в том, что большинство программных команд не удастся при попытке выполнить, пока пользователь все еще редактирует ячейку. Поэтому, если вы пытаетесь предпринять такие действия, когда ваша надстройка сначала загружается, есть довольно хороший шанс, что она загружается, когда Excel находится в режиме, который не позволит вашему коду безопасно выполнять. (Подробнее об этом см. В: Ошибка Excel при загрузке надстройки Automation .)

    Чтобы обойти эту проблему, вместо нее вы можете использовать управляемую надстройку COM, которая предназначена для обработки событий объектной модели Excel. Ваша управляемая надстройка COM может даже загружать надстройку автоматизации, если хотите; или управляемый класс надстройки COM и класс надстройки автоматизации могут находиться в одной и той же сборке, и в этом случае они могут напрямую связываться.

    Как можно обрабатывать события в целом с помощью добавок автоматизации? Я хочу, чтобы некоторые вычисления выполнялись, когда пользователь нажимает F9 для вычисления формулы udf в некоторых ячейках.

    Обнаружение при нажатии клавиши F9 можно выполнить, подписавшись на событие «Excel.Application.SheetCalculate», которое будет срабатывать в любое время, когда любой рабочий лист завершит вычисление. Вычисление в этом случае может быть вызвано по любой причине – не только для нажатия клавиши F9. Если вы хотите специально уловить ключ F9, вам нужно будет использовать обратный вызов «Application.OnKey», доступный только через VBA. Тем не менее, вы можете открыть класс в своем проекте для COM и вызвать его из надстройки VBA, которая вызывается из события «Application.OnKey».

    Для статей о надстройках надстройки см .:

    • Написание пользовательских функций для Excel в .NET.
    • Запись пользовательских функций рабочего листа Excel в C #
    • Внедрение IDTExtensibility2 в надстройке автоматизации
    • Excel не работает при загрузке надстройки Automation
    • Развертывание надстройки .NET Automation с помощью пакета установки Visual Studio

    Статьи об управляемых надстроек COM см. В следующих разделах:

    • Как создать надстройку Office COM с помощью Visual C # .NET
    • Создание надстроек Microsoft Office с Visual C # .NET и Visual Basic .NET.

    Для статей, касающихся надстроек COM и надстроек автоматизации, см.

    • Надстройки Excel COM и надстройки автоматизации
    • Создание и развертывание сборки .NET COM

    В статьях, посвященных обсуждению использования надстройки VBA, которая вызывает ваше управляемое приложение, см.

    • Простая C # DLL – как мне ее назвать из Excel, Access, VBA, VB6?
    • Как создать Excel UDF в управляемом коде VSTO
    • Вызов .NET-компонента из COM-компонента

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

    Я надеюсь, что это поможет, и, пожалуйста, спросите, хотите ли вы, чтобы я разъяснил что-то еще.

    – Майк

    Последующий ответ:

    Большое спасибо за ссылки и указатели. Я прошел через ссылки и имею полное представление о том, что нужно сделать. 🙂

    Рад, что это помогает. 🙂 Это много чтения, я предлагаю вам распечатать их и прочитать их все. Вы ищете что-то, что достаточно продвинуто, поэтому чем больше вы знаете о теме, тем лучше будет.

    Если я использую добавление на основе COM для обработки моих событий excel, как мне включить мои функции UDF?

    Управляемая надстройка COM не может выставлять функции UDF. Для этого вам все равно понадобится надстройка для автоматизации. Однако ваш управляемый класс надстройки COM и ваш класс надстройки автоматизации могут находиться в одной и той же сборке, если хотите. Поэтому ваша надстройка COM может запросить у пользователя необходимую вам информацию, и эти значения будут доступны для надстройки автоматизации при запуске UDF внутри нее.

    Будут ли они отображаться как обычные функции в панели формул, аналогичные случаю использования приложения автоматизации?

    UDF, представленные вашей надстройкой автоматизации, автоматически включаются в мастер «Вставить функцию» под категорией, соответствующей имени вашей надстройки автоматизации. Однако описание не будет включать в себя столько информации, сколько предусмотрено для встроенных функций 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.

    Я знаю, что это много, чтобы переварить, но если вы внимательно прочитаете статьи, которые я предложил здесь, я думаю, что это будет иметь смысл …

    Майк

    Interesting Posts

    Разделить на новые строки внутри ячейки

    Получить максимальное количество символов, которые могут содержать ячейки

    Условное форматирование. Как затенять определенное количество ячеек в строке после ввода определенной фазы в определенной ячейке?

    Оптимальные способы чтения данных из Excel и сохранения в SQL-сервере DB c #

    Excel VBA – как учитывать ошибки при поиске

    Копирование диапазона ячеек на основе переменных в другой диапазон

    Пытаемся объединиться в dataframe, но он продолжает создавать новые столбцы

    Серия Excel VBA

    Копировать запись данных из excel в gridview

    Запуск SQL-запросов в Excel

    Excel – поиск и замена нескольких слов

    Используйте переменные при циклировании. (например: первый цикл Variable1 = значение1 и во втором переменном цикла1 = значение2)

    Excel: найти подстроку и получить номер строки

    Как вы настойчиво форматируете TextBox для отображения числового значения?

    Ошибка при импорте в Excel

    Давайте будем гением компьютера.