Libreria .NET open source per l'elaborazione di fogli di calcolo Excel  

ExcelDNA consente di creare e distribuire componenti aggiuntivi di Excel utilizzando C#, F# o VB .NET.

Excel-DNA è un'API open source per integrare .NET in Excel. L'API consente di creare funzioni definite dall'utente (UDF) ad alte prestazioni e altro nei componenti aggiuntivi nativi (.xll) per Excel. Non è necessaria alcuna installazione o registrazione, l'intero componente aggiuntivo può essere compresso in un unico .xll.

Excel-DNA Runtime è gratuito per tutti gli usi ed è distribuito con una licenza open source permissiva che consente anche l'uso commerciale. È sviluppato utilizzando .NET e gli utenti devono installare il runtime .NET Framework. Il codice Excel e .NET si integrano tra loro utilizzando il componente aggiuntivo (.xll) che espone il codice .NET a Excel. È possibile scrivere il codice in file di script basati su testo (.dna) (C#, Visual Basic o F#) o in librerie .NET compilate (.dll).

Previous Next

Introduzione a Excel-DNA

Il modo consigliato per installare ExcelDNA è da NuGet, utilizzare il comando seguente per un'installazione più rapida.

Installa ExcelDNA da NuGet

 Install-Package ExcelDna.AddIn

Crea funzioni di Excel tramite .NET API

ExcelDNA offre ai programmatori C# .NET la competenza per generare funzioni di Excel utilizzando C#. Puoi anche usare ExcelFunctionAttributes come Nome, Descrizione, Categoria, IsHidden, IsExceptionSafe e altro. L'attributo IsMacroType modifica i parametri utilizzati da Excel-DNA durante la registrazione della funzione.

Come creare e utilizzare le funzioni Excel tramite .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;
    }
}

Supporto per array dinamici

L'API .NET open source Excel-DNA supporta anche l'uso di array dinamici all'interno di Excel. Quando scrivi una formula di matrice dinamica, determina se la formula ha il potenziale per restituire più valori.

Come fare un Array & Auto Ridimensiona il risultato tramite 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);
        }
    }

Supporto diagnostico di registrazione

L'API ExcelDNA consente agli sviluppatori .NET di utilizzare la registrazione diagnostica durante l'utilizzo del componente aggiuntivo Excel. Excel-DNA utilizza i meccanismi standard di .NET System.Diagnostics.Trace per la registrazione diagnostica.

Avvertenze Log ed Errori all'interno 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!");
 Italiano