C# ExcelやVB6で作成したActiveX(COMコンポーネント)を利用

VB6などで作成したActiveX(COMコンポーネント)を利用したり、ExcelなどをC#から操作する場合、通常は参照設定で「COM」の追加を行います。

参照設定でCOMコンポーネントを追加

次の図ではExcelのCOMコンポーネントを追加しています。※Visual Studio 2010 Productivity Power Toolsをインストールしている為、選択画面が異なる場合があります。

参照設定でExcelのCOMコンポーネントを追加

後は、自動的にラッパークラスが生成されるので簡単に利用できます。

    // エクセルオブジェクト
    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がインストールされている必要はありません。ただし、当然ですがインテリセンスは効かなくなりますので注意してコーディングする必要があります。

使用環境: Visual Studio 2010

C# メニューリスト