を公開しました。
Excel-DNAを利用しました。Excelアドインを慣れたC#で作成できるので、とてもいいです。VBAだと遅いですが.NETなので速いし、開発環境はVisual Studioを使えるし、素晴らしいです。
郵便番号から住所へ変換する本体のプログラムはさほど難しくはなかったのですが、Excel-DNAのWiXInstallerで作成するアドインセットアップに難儀した部分がありました。
Microsoft Visual C++ Runtime Library エラー
(2023-12-14追記) Excel-DNA Ver1.7以降から、下記現象は解決したようです。つまり、<ExcelDnaUnpack>true</ExcelDnaUnpack>
で、分割する必要はありません。.xllファイル
のみ配置すればOKです。
アドインをインストール後、Excelを起動した時に、Microsoft Visual C++ Runtime Library Assertion failed!
が、次の環境で発生しました。
Windows 10 Home(64bit), Excel 32bit
開発環境のPCでは問題ありません。
最新の、Microsoft Visual C++ 再頒布可能パッケージでは解決できませんでした。
.NET 6.0 add-in load failureによれば、ProjectのPropertyGroupに次を設定すると良いです。
<ExcelDnaUnpack>true</ExcelDnaUnpack>
すると、
bin\Release\net6.0-windows\publish
に
- ExcelDna.Integration.dll
- ExcelDna.Loader.dll
- ExcelDna.ManagedHost.dll
が配置されます。
これらを、アドインのフォルダに最初からセットアップ時に配置しておくことで、Visual C++ランタイムエラーを回避できました。
エラーになる理由は、Excel-DNAが作成するファイル(.xllファイルか?)を、Excel起動時・アドインをロードする時に解凍するのですが、それをアンチウイルスソフトが誤検知するからだそうです。
ですので、最初からファイルをばらばらにしておいてアドインのフォルダに配置しておけば良いようです。
.NET 6.0で作成したアドインのセットアップ
(2023-12-14追記) Excel-DNA Ver1.7以降から、publishフォルダ
に作成された、.xllファイル
のみ配置すればOKです。
Excel-DNAのWiXInstallerのテンプレートで作成すると、アドインは、
C:\Users\<ユーザー名>\AppData\Roaming\HOGE\FUGA
に配置されます。
ただし、.NET 6のアドインの場合、.xllファイルを配置するだけでは起動しません。
- HOGE-AddIn64.dna
- ExcelDna.IntelliSense.dll
といったような幾つかのファイルも、アドインフォルダに配置する必要があります。
しかも、ファイルをレジストリに登録しつつインストールしないといけないようです。
WiX4の、Product.wxs
ファイルで、例えば次のようにコードを追加します。
<Component Directory='AddinFolder' Guid='ここにGUIDを設定'>
<RegistryValue Root="HKCU" Key="Software\!(loc.ProductManufacturer)\!(loc.ProductNameNoSpace)" Name="IntelliSense" Value="AddIns" KeyPath="yes" Type="string" />
<File Source='..\FUGA\bin\Release\net6.0-windows\ExcelDna.IntelliSense.dll' />
</Component>
WiX4についてもある程度知識が必要になります。ですので、Windows インストーラーでインストールする必要が無いのでしたら、ユーザーに手動でアドインをインストールしてもらうなり、他の方法も良いでしょう。
参照:Installing Your Add-in
ユニットテスト
私はまだ試していませんが、Excel-DNA Testing Helperが利用できます。
通常の、xunitのプロジェクトでは、動きませんでした。
確認環境
- ExcelDna.AddIn 1.7.0-rc6
- ExcelDna.IntelliSense 1.7.0-rc6