3

我有一个对象:

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# 吗?

4

1 回答 1

2

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

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

然后 aNew 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 或任何东西对 Excel 可用 - 就像通过 VBA 的 COM 互操作调用的 .NET 对象上的方法一样。

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

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

于 2012-10-24T13:28:52.360 回答