我尝试使用C#ArrayList返回COM对象列表(在C#中开发),并在VBA中使用此COM对象列表(Excel 2007 ,. NET 4)
我有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,但每个项目都是“No Variables”(见附图)
你知道为什么吗?
有没有办法在C#中返回COM对象列表并在VBA中使用它们?
做这样的事情是好的做法还是有更好的方法在VBA中使用C#对象?
感谢您的帮助
答案 0 :(得分:0)
通过创建包含属性IFund [] ListFund
的IListFund,我找到了解决此问题的方法[ComVisible(true)]
public interface IListFund
{
public IFund[] ListFund { get; set; }
}
我可以在excel中获得:
Public Sub GetComObject()
Call InitVSTOAddIn ' Initialise automationObject '
Dim complexObject As ComEqd.IListFund
Dim complexArr() As ComEqd.IFund
Set complexObject = automationObject.GetComplexObject()
complexArr = complexArr.ListFund
End Sub