将列表从C#传递到VBA
本文关键字:VBA 列表 | 更新日期: 2023-09-27 18:29:08
我正在用C#编写一个DLL,用于VBA。我正在编写的一个方法将获得一个自定义类型的列表(PdfReaderPage)。我的问题是:我可以将自定义类型的列表传递到VB集合中吗?我想做
public Microsoft.VisualBasic.Collection GetPageByKeyWord(String keyword)
{
//Do some code to find correct page list
//Get List<PdfReaderPage> myList
Microsoft.VisualBasic.Collection VbCollection = myList;
return VbCollection;
}
但我不确定我是否能。A.)将列表转换为集合,或者B.)这是最好的方法。
A)将列表转换为集合,可以完成:
[ClassInterface(ClassInterfaceType.AutoDual)]
public class PdfReaderPage
{
public int Foo;
}
[ClassInterface(ClassInterfaceType.AutoDual)]
public class AccessibleFromVBA
{
public Microsoft.VisualBasic.Collection PdfReaderPages()
{
/* 1. make a List of PdfReaderPage elements */
var csharp_list = new List<PdfReaderPage>()
{
new PdfReaderPage() {Foo=1},
new PdfReaderPage() {Foo=2},
new PdfReaderPage() {Foo=3}
};
/* 2. convert it into a vb collection */
var vb_coll = new Microsoft.VisualBasic.Collection();
csharp_list.ForEach(x => vb_coll.Add(x));
/* 3. deliver it */
return vb_coll;
}
}
有一件奇怪的事情需要观察:在C#中,Collection实例实际上会比Count报告多包含一个项,因为集合在C#中是基于0的,在VBA中是基于1的,所以索引[0]处的项总是包含静态本地化字符串"空占位符以调整基于1的数组"