2012-10-23 22 views
3

我有一个对象:我们可以将自定义对象从Excel传递到C#ExcelDNA吗?

public class Shampoo 
{ 
public string Name {get;set;} 
public string Id {get;set;} 
public string PriceRegion {get;set;} 
} 

我可以在C#经由Excel中DNA通过该对象的方法:

C#的方法是:

public static string PassShampoo(Shampoo shampoo) 
{ 
//Some Code... 
} 

这是可能从VBA到C#通过Excel DNA?

回答

2

您的.NET库可以导出并注册Shampoo类作为COM可见类型,然后您可以从VBA实例化为Dim sh = New Shampoo()。类似地,其它类型的可以是限定,像

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和将不可用的方法Excel作为UDF或任何东西 - 就像通过COM与VBA进行互操作的.NET对象上的方法一样。

到目前为止 - 没有Excel-DNA参与。你可以用一个标准的.NET程序集来完成所有这些工作,该程序集使用正确的标志和属性进行编译,并在您的机器上进行COM互操作注册。

但是,Excel-DNA也允许您的加载项成为COM服务器。这意味着.xll可以托管您在库中定义的COM类,您的加载项可以在不需要管理员访问的情况下进行COM注册(而不是安装程序),并且您的COM对象将与AppDomain一样位于同一AppDomain中剩下的加载项。因此,Excel-DNA有助于粘合某些东西,但是VBA代码和.NET程序集之间的实际交互是标准的.NET到COM互操作,一旦您稍微爬上了学习曲线,它就可以很好地工作。

相关问题