Excel DNA - 我可以避免一起解决问题吗?

Eve*_*ers 3 excel vba regasm xll excel-dna

我正在尝试评估Excel DNA,以便在我的一个excel加载项中使用它.我使用C#函数(.NET 4.0)并希望从Excel调用这些函数.我感兴趣的原因是,我的插件的用户是非管理员,因此如果我能找到一个解决方案,不要在我的.NET dll上做一个regasm,让我的插件工作,那将是一个突破.

我理解,如果它就像一个工作表函数(具有简单的返回类型和参数),如:private string Add (int a, double b) 我可以使用excel dna轻松地展开它们.另外,据我所知,我也可以使用VBA中的Application.Run调用这些简单的函数.

但是,如果我有一个涉及API的复杂类型并希望从VBA使用它,那么我是否需要重新组合该程序集和类型?示例如下:

private MyType AddLogic (myType1 A,  myType2 B) 
Run Code Online (Sandbox Code Playgroud)

或者Excel Excel中是否有任何方法,我还可以在VBA中使用这类函数而不需要任何regasm或regsvr32?

谢谢Mani

Gov*_*ert 5

您指的是Excel-DNA中的内置COM服务器支持.有一些选项,所有这些选项都适用于没有管理员权限的用户.

  • 您可以在AutoOpen中在运行时注册COM类型 - 它们将在VBA后期可用(因此VBA中调用这些COM类型的所有内容都将为'Variant'而您没有智能感知).
  • 您可以使用.xll作为COM服务器,使用regsvr32注册COM类型.Excel-DNA将其类型注册到注册表的HKEY_LOCAL_USER部分,用户可以随时写入该部分.然后,即使未加载.xll加载项,也将运行使用COM公开类型的VBA项目.
  • 要为暴露于COM的类型添加类型库信息,您必须执行regsvr32注册,该注册在没有管理员权限的情况下再次工作,然后您在VBA中获得intellisense等.

在这些情况下,您都不使用RegAsm - 它将托管程序集注册为运行时激活 - 因为本机Excel-DNA .xll会调解.NET类型本身的COM激活.

如果您对提供工作表功能,色带等不感兴趣,那么您可能不需要Excel-DNA.您可以通过创建一个.reg脚本来注册.NET程序集以供非管理员使用,该脚本将修改HKEY_LOCAL_USER中的注册表项而不是HKEY_CLASSES_ROOT.我的意思是说Excel-DNA的非管理员注册并不是特殊的魔法.在Excel-DNA中集成此功能的主要原因是为了确保这些对象在与Excel-DNA加载项的其余部分相同的AppDomain中激活,这很棘手且有时很重要.