【发布时间】:2014-04-29 03:51:03
【问题描述】:
使用 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 Add-In 模板,然后转到属性->调试并告诉它启动 Excel 2010。这就是我希望构建 2007 插件的方式-in 这也适用于 Office 2010。我为 Word 加载项做了一个非常相似的方法,结果与我预期的一样。
【问题讨论】:
-
可能正在使用一个适用的(“早期绑定”)接口。
-
你可能想看看这篇文章:c-sharpcorner.com/UploadFile/psingh/…
-
@Pete 您推荐的文章有助于获得会员。谢谢
标签: c# excel office-interop