使用C#从Excel VBA迁移到VSTO。在VBA中,我有一个名为IsInCollection
的3行自定义函数,如下所示:
On Error Resume Next
Set obj = collectionObject(itemObject)
IsInCollection = Not (obj is Nothing)
我一直用它来检查给定的工作簿是否打开,或者工作簿是否包含具有特定名称的工作表等。因为集合和项参数被定义为对象,所以它可以用于任何事情。 / p>
我正在尝试在托管代码中创建相同的实用程序功能/方法,并且正在努力奋斗。问题出在collectionObject(itemObject)
表达式上。 C#不允许我像VBA一样索引对象。
如果有人能指出我正确的方向,我将不胜感激。从我的搜索开始,我一直在调查QueryInterface,但我不确定这是不是我应该看的地方。似乎一个Excel对象是System._ComObject
,所以我可能需要以某种方式迭代(?)。
TIA
答案 0 :(得分:0)
我想你想看看LINQ。例如,您可以查询像
这样的集合IsInCollection = obj.Any(s => s != null);
答案 1 :(得分:0)
C#中的索引运算符是[],而不是VB中的()。我对COM不是很熟悉,所以如果你拥有的对象只是一个对象/ System._ComObject,你可能必须先将它强制转换为适当的类型,除非_ComObject已经有了索引器。
似乎找出_ComObject实际上是什么类型可能有点困难,所以你可能想尝试一下我在http://www.mztools.com/articles/2006/mz2006013.aspx找到的技巧:
var typeName = Microsoft.VisualBasic.Information.TypeName( collectionObject );
我也怀疑你可以使用System.ComponentModel.TypeDescriptor
类。