Дополнение автоматизации по сравнению с дополнением COM

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

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

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

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

13
задан Sandy 7 March 2014 в 10:08
поделиться

1 ответ

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

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

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

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

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

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

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

Для статей об управляемых COM надстройках смотрите:

Статьи, касающиеся как модулей расширения COM, так и модулей автоматизации, см. в:

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

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

Надеюсь, это поможет, и прошу прояснить ситуацию.

-- Майк

Followw-Up Reply:

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

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

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

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

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

UDF-функции, выставленные вашей автоматизированной надстройкой, будут автоматически включены в мастер "Функция вставки" в категорию, соответствующую названию вашей автоматизированной надстройки. Однако описание не будет автоматически включать столько информации, сколько предоставляется для встроенных функций Excel. Функции по умолчанию, как правило, подойдут, но если вы хотите предоставить более полную информацию для мастера 'Вставить функцию', то это сложная тема. Смотрите: Excel 2007 UDF: как добавить описание функции, помощь аргумента.

Скажем, мне нужно вызвать формулу getcube, которая возвращает куб числа. public double getcube(double a) { вернуть * a * a; }

Когда мой addin использует и пользовательский интерфейс, определяющий мои UDF и IDTExtensibility2, как мне справиться с таким случаем? Не могли бы вы объяснить этот случай на примере?

Пока что я не вижу необходимости реализовывать IDTExtensibility2, основываясь на том, что вы показываете здесь, вам нужен только стандартный автоматизированный админ. Для стандартной надстройки автоматизации следует прочитать Запись пользовательских функций для Excel в .NET и Запись пользовательских функций Excel на C#. Обсуждение реализации IDTExtensibility2 для управляемой COM надстройки см. в Реализация IDTExtensibility2 в надстройке автоматизации.

Есть ли способ просто реализовать IDTExtensibility2 в надстройке автоматизации, чтобы получить доступ к Excel. Прикладной объект или создать для него отдельный COM-добавление?

Вы абсолютно точно можете реализовать IDTExtensibility2 непосредственно в вашей надстройке автоматизации, для этого нет необходимости создавать управляемую COM-добавление. Опять же, см. Реализация IDTExtensibility2 в автоматизированной надстройке . Однако, вы хотите использовать обработку событий против объектной модели Excel. Хотя это можно сделать с помощью надстройки автоматизации, это нестандартная и не та задача, для решения которой предназначена надстройка автоматизации. В частности, вы хотите иметь пользовательскую вводимую информацию при первой загрузке надстройки автоматизации, это может быть особенно сложная ситуация, поэтому я рекомендую использовать для этой задачи управляемую COM-надстройку. Подробнее об этом см. в Excel, когда Automation add-In загружается.

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

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

Майк

.
28
ответ дан 1 December 2019 в 20:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: