簡體   English   中英

我們可以將自定義對象從Excel傳遞給C#ExcelDNA嗎?

[英]Can we pass a custom object from Excel to 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;
    }
}

然后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或任何東西用於Excel - 就像通過VBA的COM互操作上的.NET對象上的方法一樣。

到目前為止 - 沒有涉及Excel-DNA 您可以使用標准.NET程序集完成所有這些操作,該程序集使用正確的標志和屬性進行編譯,並在計算機上注冊COM interop。

但是,Excel-DNA還允許您的加載項成為COM服務器。 這意味着.xll可以托管您在庫中定義的COM類,您的加載項可以在不需要管理員訪問權限的情況下進行COM注冊(而不是安裝程序),並且您的COM對象將存在於同一個AppDomain中。你的加載項的其余部分。 所以Excel-DNA有點混淆了東西,但VBA代碼和.NET程序集之間的實際交互是標准的.NET-to-COM互操作,一旦你爬上學習曲線,它就能很好地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM