使用 VisualStudio 2008,我创建了一个简单的 Excel 2007 加载项项目。
我添加如下代码...
var app = Application;
var members = app.GetType().GetMembers(BindingFlags.Public|
BindingFlags.NonPublic|
BindingFlags.Instance|
BindingFlags.Static);
var typeName = app.GetType().Name;
...到 ThisAddIn_Startup 方法(并解决对 System.Reflection 的缺失引用)。
当我运行代码时,typeName 是“_ ComObject”。我期待像“Excel.ApplicationClass”这样的东西。而且,members 只包含 26 个成员,远远少于 Excel.Application 对象。单步执行代码,我将鼠标悬停在应用程序上,并显示了许多成员(所有成员都带有蓝色图标,这有点奇怪)。但是,显示的类型名称是“System.Runtime.Remoting.Proxies._TransparentProxy ”,这又不是我所期望的。
在设计时,键入 app{dot} 以获取“Intelli-sense”会列出可供选择的各种成员,即它列出了所有 Excel.Application 成员。
此外,如果我运行 Powershell 脚本...
$obj = New-Object -ComObject excel.application
$obj | get-member
...输出列出了所有 Excel.Application 成员。
那么,如何在运行时获取 C# 中所有 Excel.Application 成员的 MemberInfo 对象?
最后,以防万一,我在创建项目时选择 Excel 2007 加载项模板,然后转到属性->调试并告诉它启动 Excel 2010。这就是我希望构建一个 2007 加载项的方式也适用于 Office 2010。我为 Word 加载项做了一个非常相似的方法,结果与我预期的一样。