我尝试使用C# ArrayList返回一组COM对象(在C#中开发),并在VBA(Excel 2007,.NET 4)中使用此COM对象列表。
我有3个C#函数,从Excel(VSTO项目)中调用这些函数。
public ArrayList GetSimpleArray()
{
ArrayList arr = new ArrayList();
arr.Add(3);
arr.Add(2);
return arr;
}
public ArrayList GetComplexArray()
{
ArrayList arr = new ArrayList();
arr.Add(new Fund() { Id = "2" } );
arr.Add(new Fund() { Id = "3" });
return arr;
}
public IFund GetComplexObject()
{
return new Fund() { Id = "2" };
}
定义了Fund和IFund:
[ComVisible(true)]
public interface IFund
{
string Id { get; set; }
string Name { get; set; }
}
[ComVisible(false)]
public sealed class Fund:IFund
{
public string Id { get; set; }
public string Name { get; set; }
public Fund()
{
}
public Fund(string id, string name)
{
this.Id = id;
this.Name = name;
}
}
在Excel中我有:
Public Sub GetComObject()
Call InitVSTOAddIn ' Initialise automationObject
Dim complexObject
Set complexObject = automationObject.GetComplexObject()
Dim simpleArray
Set simpleArray = automationObject.GetSimpleArray()
Dim complexArray
Set complexArray = automationObject.GetComplexArray()
End Sub
complexObject和simpleArray具有我正在寻找的值(complexObject是一个带有Id和Name的对象,simpleArray是一个包含2个元素“3”和“2”的ArrayList)。
问题在于complexArray。它是一个具有2个项目的ArrayList,但每个项目都是“无变量”(请参见附图)。
你知道为什么吗?
在C#中是否有一种返回COM对象列表并在VBA中使用它们的方法?
这样做是好的实践还是在VBA中使用C#对象的更好方式?
谢谢您的帮助。