Excel DNA - Могу ли я избежать одновременного выполнения регазма? - PullRequest
3 голосов
/ 31 октября 2011

Я пытаюсь оценить Excel DNA , чтобы использовать его в одной из моих надстроек Excel. Я использую функции C # (.NET 4.0) и хочу вызвать эти функции из Excel. Меня интересует причина, по которой пользователи моего надстройки не являются админами, и, следовательно, было бы прорывом, если бы я смог найти решение не выполнять регазм на моей .NET dll, чтобы заставить мой надстройку работать.

Я понимаю, что если она похожа на функцию рабочего листа (с простыми типами возврата и аргументами), например: private string Add (int a, double b) Я могу легко обернуть их, используя Excel ДНК. Кроме того, я понимаю, что я также могу вызывать эти простые функции, используя Application.Run из VBA.

Но, если у меня есть сложный тип, связанный с API, и я хочу использовать его из VBA, тогда мне нужно пересобрать эту сборку и типы? пример как в этом:

private MyType AddLogic (myType1 A,  myType2 B) 

Или в Excel ДНК есть способ использовать такие функции в VBA без каких-либо regasm или regsvr32?

Спасибо Mani

1 Ответ

5 голосов
/ 31 октября 2011

Вы имеете в виду поддержку встроенного COM-сервера в Excel-DNA. Есть несколько вариантов, все они отлично работают для пользователей без прав администратора.

  • Вы можете зарегистрировать типы COM во время выполнения в вашем AutoOpen - тогда они будут доступны с поздним связыванием из VBA (поэтому все, что в VBA вызывает эти типы COM, будет 'Variant', и вы не получите intellisense).
  • Вы можете зарегистрировать типы COM с помощью regsvr32, используя .xll в качестве COM-сервера. Excel-DNA регистрирует свои типы в части реестра HKEY_LOCAL_USER, в которую пользователь всегда может записать данные. Тогда проект VBA, использующий типы, предоставляемые COM, будет запущен, даже если надстройка .xll не загружена.
  • Чтобы добавить информацию библиотеки типов для открытых для COM типов, вам нужно будет выполнить регистрацию в regsvr32, которая снова работает без прав администратора, а затем вы получите intellisense и т. Д. В VBA.

Ни в одном из этих случаев вы не используете RegAsm - который регистрирует управляемые сборки для активации во время выполнения - поскольку нативный Excel-DNA .xll опосредует COM-активацию ваших типов .NET.

Если вы не заинтересованы в предоставлении функций рабочего листа, лент и т. Д., Вам, вероятно, не нужен Excel-DNA для этого. Вы можете зарегистрировать сборки .NET для использования не-администратором из VBA, просто создав сценарий .reg, который исправит записи реестра в HKEY_LOCAL_USER вместо HKEY_CLASSES_ROOT. Я имею в виду, что регистрация Excel-DNA без прав администратора не является особой магией. Основная причина интеграции этой функции в Excel-DNA заключается в том, чтобы эти объекты активировались в том же AppDomain, что и остальная часть надстройки Excel-DNA, что довольно сложно, а иногда и важно.

...