7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel-DNAを使って.NETでエクセルアドイン(.xll)をつくる

Last updated at Posted at 2024-10-24

Excel-DNAというものでアドインファイル(.xll)をつくってみました!
.NETにてエクセルアドインをつくることができます。
簡単にできそうでしたが、自分の環境のせいで色々とつまったので、そのメモです。

こちらでは非同期処理をしてみました!

追記
TargetFrameworkについて

準備

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

launch.json
"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対応になっていることが関係しそう?

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にデバッグで使うようのエクセルを保存しておく。

tasks.json
        {
            "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",
        },

これでビルドしてエクセルの起動までできました!
debugDNA.gif

xllを使用する

Installing Your Add-in

  • publishフォルダ内に、xllへパッケージ化されたファイルが保存されているはずです
  • 呼び出すエクセルファイルと同じフォルダに、xllファイルを置きます
  • ThisWorkbookWorkbook_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をスポンサー

参考

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?