Excel-DNAというものでアドインファイル(.xll)をつくってみました!
.NETにてエクセルアドインをつくることができます。
簡単にできそうでしたが、自分の環境のせいで色々とつまったので、そのメモです。
準備
vscode
エクセル2019 32bit
- dotnet new classlib -n ExcelDnaAddin
- dotnet add package ExcelDna.Addin
- ターゲットフレームワークをnet6に変える
- .csprojファイルのPropertyGroup内の変更
<TargetFramework>net6.0-windows</TargetFramework>
TargetFrameworkについて
- net8もサポートされているようです
<TargetFramework>net8.0-windows</TargetFramework>
Getting Startedのために
Getting Started
ドキュメントの内容を実行してもエクセルは起動しない。
classlibなのでそれはそう。
msbuildでビルドされるだけなので。
using ExcelDna.Integration;
public static class MyFunctions
{
[ExcelFunction(Description = "My first .NET function")]
public static string SayHello(string name)
{
return "Hello " + name;
}
}
vscodeでの場合
vscodeでの場合について以下にありました。
launchの内容を変えて、デバッグビルド時にエクセルを起動するようにします。
⇒エクセルがx32だからなのかエラーがでてダメなようです。
https://groups.google.com/g/exceldna/c/N_MzRcBB2hs/m/XVEqWMiIBAAJ
"program": "C:/Program Files (x86)/Microsoft Office/root/Office16/EXCEL.EXE",
"args": ["${workspaceFolder}/bin/Debug/net6.0-windows/ExcelDnaAddin.dll"],
エラー
プログラム 'C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE'を開始できません。.NET デバッガーは、x64 プロセスのみをデバッグできます。
ビルドした時に32bitのエクセルを起動させたい
以下記事を参考に色々試しましたが、tasks.jsonから実行する方法としました。
msbuildが64bit対応になっていることが関係しそう?
- C#(.NET Core6.0)をx86でVSCodeのビルド実行できるまで コード -532462766 (0xe0434352) で終了の解消
- MSBuild に対する Visual Studio 2022 の 64bit プロセス化の影響
launchとtasksの変更
最終的にこのようにしました。
launch.json
preLaunchTaskをbuildからappExcelに変更。
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "appExcel",
// "preLaunchTask": "build",
"program": "${workspaceFolder}/bin/Debug/net6.0-windows/ExcelDnaAddin.dll",
"args": [],
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"stopAtEntry": false
}
tasks.json
エクセルを起動するためのappExcelを追加。
${workspaceFolder}/bin/Debug/net6.0-windows/publish/debug.xlsx
にデバッグで使うようのエクセルを保存しておく。
{
"label": "appExcel",
"command": "C:/Program Files (x86)/Microsoft Office/root/Office16/EXCEL.EXE",
"type": "process",
"args": ["${workspaceFolder}/bin/Debug/net6.0-windows/publish/ExcelDnaAddin-AddIn-packed.xll",
"${workspaceFolder}/bin/Debug/net6.0-windows/publish/debug.xlsx"],
"problemMatcher": [],
"dependsOn": "build",
},
xllを使用する
- publishフォルダ内に、xllへパッケージ化されたファイルが保存されているはずです
- 呼び出すエクセルファイルと同じフォルダに、xllファイルを置きます
-
ThisWorkbook
のWorkbook_Open
へ以下を入れて、ファイルを開く時にxllを読み込むようにします - 条件付きコンパイラで32bit/64bitにより読み込むファイルを切り替えるようにしています
Option Explicit
Private Sub Workbook_Open()
#If Win64 Then
Application.RegisterXLL Me.Path + "\ExcelDnaAddin-AddIn64-packed.xll"
#Else
Application.RegisterXLL Me.Path + "\ExcelDnaAddin-AddIn-packed.xll"
#End If
End Sub
- これでExcel-DNAでの関数を呼び出す事ができます
- ワークシートからの呼び出しは、
=SayHello(引数)
- vbaにての呼び出しは、
tmp = Application.Run("SayHello", 引数)
Excel-DNAをスポンサー
- govertさんという方がほとんど一人で開発されているようです
- SQLiteForExcelで知ったのですが色々な事されている方世界にはいますね!
- https://github.com/sponsors/Excel-DNAで応援しましょう