gpt4 book ai didi

c# - 通过反射调用 this[int index]

转载 作者:可可西里 更新时间:2023-11-01 08:46:47 28 4
gpt4 key购买 nike

我尝试为 Microsoft Office 实现一个基于反射的后期绑定(bind)库。Office COM 对象的属性和方法调用方式如下:

Type type = Type.GetTypeFromProgID("Word.Application");
object comObject = Activator.CreateInstance(type);
type.InvokeMember(<METHOD NAME>, <BINDING FLAGS>, null, comObject, new object[] { <PARAMS>});

InvokeMember 是唯一可能的方法,因为 Type.GetMethod/GetProperty 无法正确处理 COM 对象。

可以使用 InvokeMember 调用方法和属性,但现在我必须解决以下问题:

office-interop 包装器中的方法:

Excel.Workbooks wb = excel.Workbooks;
Excel.Workbook firstWb = wb[0];

分别

foreach(Excel.Workbook w in excel.Workbooks)
// doSmth.

如何通过反射调用Excel.Workbooks的this[int index]操作符?

最佳答案

我可能误解了你的问题,但希望这对一些人有所帮助。

当您有一个工作簿时,这将获取第 n:th 个工作簿:

typeof(Workbooks).GetMethod("get_Item").Invoke(excel.Workbooks, new object[] { n });

GetMethod 对我来说似乎很有效,您使用的是什么版本的 .NET?

否则这可能会起作用:

typeof(Workbooks).InvokeMember("Item", BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, excel.Workbooks, new object[] { n });

这个(计数)也非常有用:

typeof(Workbooks).InvokeMember("Count", BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, excel.Workbooks, null).

如果类型是 excel 类型,则获取工作簿:

type.InvokeMember("Workbooks", BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, excel.Workbooks, null)

关于c# - 通过反射调用 this[int index],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13156620/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com