我们可以将自定义对象从Excel传递到C#ExcelDNA吗?
我有一个对象:
public class Shampoo { public string Name {get;set;} public string Id {get;set;} public string PriceRegion {get;set;} }
我可以通过Excel DNA将此对象传递给C#中的一个方法:
C#方法是:
public static string PassShampoo(Shampoo shampoo) { //Some Code... }
这是可能的从VBA通过Excel DNA的C#?
您的.NET库可以将Shampoo
类导出并注册为COM可见types,然后您可以从VBA实例化为Dim sh = New Shampoo()
。 同样的其他types可以定义,如
public class Shopper() { public string ReadLabel(Shampoo shampoo) { return shampoo.Name; } }
然后一个New Shopper()
可以通过shampoo
:
Dim anne As Shopper = New Shopper() Dim dove As Shampoo = New Shampoo() Dim label As String label = anne.ReadLabel(dove)
使用Shampoo
(上面的Shopper.ReadLabel
)的方法不会是static
,并且不能作为UDF或任何东西使用 – 就像通过COM与VBA进行互操作的.NET对象上的方法一样。
到目前为止 – 没有涉及Excel的DNA 。 你可以用一个标准的.NET程序集来完成所有这些工作,这个程序集是使用正确的标志和属性进行编译的,并在你的机器上进行COM互操作。
但是,Excel-DNA也允许您的加载项成为COM服务器。 这意味着.xll可以托pipe您在库中定义的COM类,您的插件可以在不需要pipe理员访问的情况下进行COM注册(而不是安装程序),并且您的COM对象将与AppDomain剩下的加载项。 因此,Excel-DNA有助于粘合某些东西,但是VBA代码和.NET程序集之间的实际交互是标准的.NET-COM互操作,一旦你爬上了学习曲线。