LoginSignup
2
1

ExcelDNAで、async/awaitを利用する

Posted at

情報が分散しているので、ExcelDNAで非同期処理の関数を動かすのに時間がかかりました。

ExcelDNAの非同期関数のサンプルは、
AsyncFunctionExamples.cs
にあります。

プロジェクトに追加

  • nugetで、ExcelDna.Registrationを追加して下さい。

  • <PropertyGroup>に次を登録します。

<ExcelAddInExplicitRegistration>true</ExcelAddInExplicitRegistration>

コピーするファイル

次に列記したファイルを、プロジェクトにコピーします。
ただし、どこまで必要なコードか詳しく分析していないので、不要な部分も含むと思います。

  • ExampleAddIn.cs
    このファイルのうち次の部分は、コメントアウトで良いです。
InstanceMemberRegistration.TestInstanceRegistration();

次の部分で、C#のメソッドをExcel関数として登録していくと思われます。

public void AutoOpen()
{
  ExcelRegistration.GetExcelFunctions()
    .ProcessMapArrayFunctions(conversionConfig)
    .ProcessParameterConversions(conversionConfig)
    .ProcessAsyncRegistrations(nativeAsyncIfAvailable: false)
    .ProcessParameterConversions(postAsyncReturnConfig)
    .ProcessParamsRegistrations()
    .ProcessFunctionExecutionHandlers(functionHandlerConfig)
    .RegisterFunctions();

関数

次のように、Excelの関数にするメソッドに、[ExcelAsyncFunction]をつけます。

[ExcelAsyncFunction]
public static async Task<string> dnaDelayedTaskHello(string name, int msDelay)
{
     await Task.Delay(msDelay);
     return "Hello " + name;
}

確認環境

.NET 6

2
1
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
2
1