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」のようなものを期待していました。また、メンバーには、Excel.Application オブジェクトよりもはるかに少ない 26 のメンバーしか含まれていません。コードをステップ実行すると、アプリにカーソルを合わせると、多くのメンバーが表示されます (すべてのメンバーが青色のアイコンになっていますが、これは少し奇妙です)。ただし、表示されるタイプ名は「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 アドインに対して非常によく似たアプローチを行ったところ、期待どおりの結果が得られました。