我们可以将自定义对象从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互操作,一旦你爬上了学习曲线。