.NET Framework の機能をEXCELから使う

■環境
VisualStudio2003
VB.NET
Excel 2003

■概要
.NET framework の機能をExcelから使いたかったのです。
なので、その機能をラッピングしたCOMを作ってExcelから使います。
ちょっと迷ったのでメモ代わり。

■作り方

COM を作る

1、新しいVBプロジェクトを「クラスライブラリ」で作成する。
2、プロジェクトのプロパティの「ルート名前空間」を "md5create" に設定。(名前は任意に)
3、プロジェクトに「新しい項目の追加」で COM クラス を追加する。
4、クラス名を "dotnetmd5" にセットして Public メソッドを追加する。

Imports System.IO

 _
Public Class dotnetmd5

#Region "COM GUIDs"
#End Region

    ' 作成可能な COM クラスには、パラメータなしの Public Sub New() を指定しなければ
    ' なりません。これを行わないと、クラスは COM レジストリに登録されず、
    ' CreateObject 経由で
    ' 作成できません。
    Public Sub New()
        MyBase.New()
    End Sub

    Public Function getMD5(ByVal sFilePath As String) As String
        Dim oFile As FileStream
        Dim oStream As StreamReader


        oFile = File.Open(sFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        oStream = New StreamReader(oFile)

        Dim s As String = oStream.ReadToEnd

        oStream.Close()
        oFile.Close()

        oStream = Nothing
        oFile = Nothing


        'MD5ハッシュ値を計算する文字列
        Dim md5 As New System.Security.Cryptography.MD5CryptoServiceProvider
        '文字列をbyte型配列に変換してからハッシュ値を計算
        Dim bHashs As Byte() = md5.ComputeHash(System.Text.Encoding.ASCII.GetBytes(s))
        'byte型配列を16進数の文字列に変換
        'ここの部分は次のようにもできる
        Dim bHash As Byte
        Dim strResult As New System.Text.StringBuilder
        For Each bHash In bHashs
            strResult.Append(bHash.ToString("x2"))
        Next
        Return strResult.ToString

    End Function

End Class

まあ、ソースの中身は気にしないで。
こういうメソッドを追加しましたという感じで。
動き的にはファイル名を渡して中身で MD5 を作成して文字列で返すだけ。

5、DLL ファイルを作成する。

6、「Visual Studio .NET 2003 コマンド プロンプト」から

regasm.exe md5create.dll

を実行してCOMとして登録する。
regasm.exe はアセンブリ登録ツール

Excel から使う

1、Visual Basic Editer を開ける
2、メニューの[ツール]->[参照設定]で "md5create" にチェックを付ける
3、実装コードを書く

Public oMd5 As New dotnetmd5

Public Function getMD5(ByVal strFilePath As String) As String

    getMD5 = oMd5.getMD5(strFilePath)

End Function

な感じです。

これで、.NET framework
System.Security.Cryptography.MD5CryptoServiceProvider
を使った md5 の取得を Excel から実行できます。