Bibliotecă open source .NET pentru procesarea foilor de calcul Excel  

ExcelDNA vă permite să creați și să implementați programe de completare Excel folosind C#, F# sau VB .NET.

Excel-DNA este un API open source pentru integrarea .NET în Excel. API-ul vă permite să creați funcții de înaltă performanță definite de utilizator (UDF) și multe altele în suplimentele native (.xll) pentru Excel. Nu aveți nevoie de nicio instalare sau înregistrare, întregul program de completare poate fi împachetat într-un singur .xll.

Excel-DNA Runtime este gratuit pentru orice utilizare și este distribuit sub o licență open-source permisivă, care permite și utilizarea comercială. Este dezvoltat folosind .NET, iar utilizatorii trebuie să instaleze runtime-ul .NET Framework. Excel și codul .NET se integrează unul cu celălalt folosind Add-In (.xll) care expune codul .NET la Excel. Puteți scrie codul în fișiere script bazate pe text (.dna) (C#, Visual Basic sau F#) sau în biblioteci .NET compilate (.dll).

Previous Next

Noțiuni introductive cu Excel-DNA

Modul recomandat de a instala ExcelDNA este de la NuGet. Vă rugăm să utilizați următoarea comandă pentru o instalare mai rapidă.

Instalați ExcelDNA din NuGet

 Install-Package ExcelDna.AddIn

Creați funcții Excel prin .NET API

ExcelDNA oferă programatorilor C# .NET competența de a genera funcții Excel folosind C#. De asemenea, puteți utiliza ExcelFunctionAttributes precum Nume, Descriere, Categorie, IsHidden, IsExceptionSafe și multe altele. Atributul IsMacroType modifică parametrii pe care Excel-DNA îi folosește la înregistrarea funcției.

Cum să creați și să utilizați funcții Excel prin intermediul .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;
    }
}

Suport pentru matrice dinamice

API-ul .NET Excel-DNA cu sursă deschisă acceptă, de asemenea, utilizarea de matrice dinamice în interiorul excel. Când scrieți o formulă matrice dinamică, aceasta determină dacă formula are potențialul de a returna mai multe valori.

Cum să faci un Array Auto să reziste prin 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);
        }
    }

Suport pentru înregistrarea diagnosticului

ExcelDNA API permite dezvoltatorilor .NET să utilizeze înregistrarea de diagnosticare în timp ce lucrează cu Excel Add-In. Excel-DNA utilizează mecanismele standard .NET System.Diagnostics.Trace pentru înregistrarea diagnosticului.

Avertisment și erori în interiorul 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!");
 Română