Open-Source-.NET-Bibliothek zur Verarbeitung von Excel-Tabellen  

Mit ExcelDNA können Sie Excel-Add-Ins mit C#, F# oder VB .NET erstellen und bereitstellen.

Excel-DNA ist eine Open-Source-API zur Integration von .NET in Excel. Mit der API können Sie leistungsstarke benutzerdefinierte Funktionen (UDFs) und mehr in Ihren nativen (.xll)-Add-Ins für Excel erstellen. Sie benötigen keine Installation oder Registrierung, Ihr gesamtes Add-In kann in eine einzige .xll-Datei gepackt werden.

Die Excel-DNA-Laufzeit ist für alle Zwecke kostenlos und wird unter einer freizügigen Open-Source-Lizenz verteilt, die auch eine kommerzielle Nutzung erlaubt. Es wird mit .NET entwickelt und Benutzer müssen die .NET Framework-Laufzeitumgebung installieren. Der Excel- und der .NET-Code lassen sich mithilfe des Add-Ins (.xll) integrieren, das den .NET-Code für Excel verfügbar macht. Sie können Ihren Code in textbasierten (.dna) Skriptdateien (C#, Visual Basic oder F#) oder kompilierten .NET-Bibliotheken (.dll) schreiben.

Previous Next

Erste Schritte mit Excel-DNA

Der empfohlene Weg, ExcelDNA zu installieren ist von NuGet, Bitte benutzen Sie den folgenden Befehl für eine schnellere Installation.

Installieren Sie ExcelDNA von NuGet

 Install-Package ExcelDna.AddIn

Erstellen Sie Excel-Funktionen über die .NET-API

ExcelDNA verleiht C# .NET-Programmierern die Kompetenz, Excel-Funktionen mit C# zu generieren. Sie können auch ExcelFunctionAttributes wie Name, Description, Category, IsHidden, IsExceptionSafe und mehr verwenden. Das IsMacroType-Attribut ändert die Parameter, die Excel-DNA beim Registrieren der Funktion verwendet.

How to Create & Use Excel Functions via .NET API

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;
    }
}

Unterstützung für dynamische Arrays

Die Open-Source-.NET-API Excel-DNA unterstützt auch die Verwendung dynamischer Arrays in Excel. Wenn Sie eine dynamische Matrixformel schreiben, wird bestimmt, ob die Formel das Potenzial hat, mehrere Werte zurückzugeben.

How to Make an Array & Auto Resize the Result via 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);
        }
    }

Diagnoseprotokollierungsunterstützung

Die ExcelDNA-API ermöglicht .NET-Entwicklern die Verwendung der Diagnoseprotokollierung bei der Arbeit mit dem Excel-Add-In. Excel-DNA verwendet die standardmäßigen .NET System.Diagnostics.Trace-Mechanismen für die Diagnoseprotokollierung.

Warnungen und Fehler im 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!");
 Deutsch