Excel スプレッドシートを処理するためのオープン ソース .NET ライブラリ  

ExcelDNA を使用すると、C#、F#、または VB .NET を使用して Excel アドインを作成および展開できます。

Excel-DNA は、.NET を Excel に統合するためのオープン ソース API です。 API を使用すると、Excel のネイティブ (.xll) アドインで高パフォーマンスのユーザー定義関数 (UDF) などを作成できます。インストールや登録は必要ありません。アドイン全体を 1 つの .xll にまとめることができます。

Excel-DNA ランタイムは、すべての使用に対して無料であり、商用使用も許可する寛容なオープン ソース ライセンスの下で配布されます。これは .NET を使用して開発されており、ユーザーは .NET Framework ランタイムをインストールする必要があります。 Excel と .NET コードは、.NET コードを Excel に公開するアドイン (.xll) を使用して相互に統合されます。コードは、テキスト ベース (.dna) のスクリプト ファイル (C#、Visual Basic、または F#)、またはコンパイル済みの .NET ライブラリ (.dll) で記述できます。

Previous Next

Excel-DNA を始める

ExcelDNA をインストールする推奨される方法は、NuGet からです。インストールを高速化するには、次のコマンドを使用してください。

NuGet から ExcelDNA をインストールする

 Install-Package ExcelDna.AddIn

.NET API 経由で Excel 関数を作成する

ExcelDNA は、C# .NET プログラマーに、C# を使用して Excel 関数を生成する能力を提供します。 Name、Description、Category、IsHidden、IsExceptionSafe などの ExcelFunctionAttributes を使用することもできます。 IsMacroType 属性は、関数の登録時に Excel-DNA が使用するパラメーターを変更します。

.NET API で Excel 関数を作成および使用する方法

public class GetInfoFunctions
{
    [ExcelFunction(Description = "Returns the result of xlfGetCell.", IsMacroType = true)]
    public static object GetCell(int type_num, [ExcelArgument(AllowReference = true)] object reference)
    {
        return XlCall.Excel(XlCall.xlfGetCell, type_num, reference);
    }
    [ExcelFunction(Description = "Returns the result of xlfGetWorkspace.", IsMacroType = true)]
    public static object GetWorkspace(int type_num)
    {
        return XlCall.Excel(XlCall.xlfGetWorkspace, type_num);
    }
    [ExcelFunction(Description = "Returns the current list separator.", IsMacroType = true)]
    public static string GetListSeparator(int type_num)
    {
        object[,] workspaceSettings = (object[,])XlCall.Excel(XlCall.xlfGetWorkspace, 37);
        string listSeparator = (string)workspaceSettings[0, 4];
        return listSeparator;
    }
}

動的配列のサポート

オープン ソースの .NET API Excel-DNA は、Excel 内での動的配列の使用もサポートしています。動的配列数式を記述すると、数式が複数の値を返す可能性があるかどうかが判断されます。

配列を作成し、C# API を介して結果のサイズを自動変更する方法

public static object dnaMakeArrayAndResize(int rows, int columns, string unused, string unusedtoo)
        {
            object[,] result = dnaMakeArray(rows, columns);
            return ArrayResizer.dnaResize(result);
            // Can also call Resize via Excel - so if the Resize add-in is not part of this code, it should still work
            // (though calling direct is better for large arrays - it prevents extra marshaling).
            // return XlCall.Excel(XlCall.xlUDF, "Resize", result);
        }
        public static double[,] dnaMakeArrayAndResizeDoubles(int rows, int columns)
        {
            double[,] result = dnaMakeArrayDoubles(rows, columns);
            return ArrayResizer.dnaResizeDoubles(result);
        }
    }

診断記録サポート

ExcelDNA API を使用すると、.NET 開発者は Excel アドインを操作しながら診断ログを使用できます。 Excel-DNA は、診断ログに標準の .NET System.Diagnostics.Trace メカニズムを使用します。

Add-in内の警告とエラーをログ化

public void AutoOpen()
{
    // Log warnings and errors to the Excel-DNA LogDisplay
    Trace.Listeners.Add(new LogDisplayTraceListener());
}
...
Trace.TraceInformation("Trace information!");
Trace.TraceWarning("Trace warning!");
Trace.TraceError("Trace error!");
 日本