![](/img/trans.png)
[英]How to return a custom object or double[,] to a cell in Excel from 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.