VB6などで作成したActiveX(COMコンポーネント)を利用したり、ExcelなどをC#から操作する場合、通常は参照設定で「COM」の追加を行います。
次の図ではExcelのCOMコンポーネントを追加しています。※Visual Studio 2010 Productivity Power Toolsをインストールしている為、選択画面が異なる場合があります。
後は、自動的にラッパークラスが生成されるので簡単に利用できます。
// エクセルオブジェクト Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); // エクセルファイルを開く excel.Workbooks.Open(@"d:\Test.xlsx");
次に、「遅延バインディング」つまり参照設定を行わずに利用する方法について説明します。
以前はリフレクションの機能で実現していましたが、かなり複雑なコードになっていました。ですが、C#4.0からはdynamic型が使用できるので簡単に実現できます。
// エクセルオブジェクト dynamic excel = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application")); // エクセルファイルを開く excel.Workbooks.Open(@"d:\Test.xlsx");
dynamic型を利用すると、実行時に型を解釈してくれる為ビルド環境にActiveXがインストールされている必要はありません。ただし、当然ですがインテリセンスは効かなくなりますので注意してコーディングする必要があります。