我们可以将自定义对象从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...
}

这可以通过Excel DNA从VBA到C#吗?

.NET 库可以将Shampoo类导出并注册为 COM 可见类型,然后可以从 VBA 实例化该类型Dim sh = New Shampoo()。同样,可以定义其他类型,例如

public class Shopper()
{
public string ReadLabel(Shampoo shampoo)
{
return shampoo.Name;
}
}

然后可以通过shampoo传递New Shopper()

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 或任何内容用于 Excel - 就像通过 VBA 的 COM 互操作调用的 .NET 对象上的方法一样。

到目前为止 - 没有涉及Excel-DNA。可以使用标准 .NET 程序集执行所有这些操作,该程序集使用正确的标志和属性进行编译,并在计算机上注册为 COM 互操作。

但是,Excel-DNA 还允许您的加载项成为 COM 服务器。这意味着 .xll 可以承载您在库中定义的 COM 类,外接程序无需管理员访问权限即可执行 COM 注册(而不是安装程序),并且 COM 对象将与外接程序的其余部分位于同一 AppDomain 中。因此,Excel-DNA在粘合事物方面有所帮助,但是VBA代码和.NET程序集之间的实际交互是标准的。NET 到 COM 互操作,一旦您稍微爬上了学习曲线,它就会很好地工作。

最新更新