C#で作成したアセンブリをExcelから呼び出す
ちょっと仕事で必要だったので調べてみました。基本的にはCOMから.NET呼び出しなのでCCWとなるのですが、ググってみるとVB.NETにてComClass属性を使うという例を発見。ComClass属性はVBのみなのでC#からは直接Excel公開は出来ない、という感じでした。が、納得が行かないので、ちまちま試していたらC#でも公開できました。ってか、すごく簡単でした。最初に探した記事はVS.NET時代のなので、VS2005から出来るようになったのかもしれません?
手順は以下の通り。
Excelから呼び出す簡単なアセンブリを作成します。ライブラリプロジェクトを作って、以下のコードを書きます。
using System; using System.Runtime.InteropServices; namespace MyClassLibrary { [ClassInterface(ClassInterfaceType.AutoDual)] public class Calc { public int Add(int x, int y) { return x + y; } public int Sub(int x, int y) { return x - y; } } }
- ClassInterface属性
- publicなメソッド、プロパティ
- デフォルトコンストラクタ
これらが必要な条件です。引数を取るコンストラクタを用意する場合は、引数なしも用意しておくことを忘れないように注意です。
では、これをExcelから呼び出せるようにプロジェクトの設定を行います。
ここから、Assembly Informationボタンを押します。
Make assembly COM-Visibleにチェックを入れます。
Register for COM interopにチェックを入れます。
これでビルドすれば、Excelから使うことができます。
では、Excel側。
普通のCOM同様、参照設定を行います。
すると、こんな感じ。