Biblioteca .NET de código abierto para procesar hojas de cálculo de Excel  

ExcelDNA le permite crear e implementar complementos de Excel usando C#, F# o VB .NET.

Excel-DNA es una API de código abierto para integrar .NET en Excel. La API le permite crear funciones definidas por el usuario (UDF) de alto rendimiento y más en sus complementos nativos (.xll) para Excel. No necesita ninguna instalación o registro, su complemento completo se puede empaquetar en un solo .xll.

Excel-DNA Runtime es gratuito para todos los usos y se distribuye bajo una licencia permisiva de código abierto que también permite el uso comercial. Está desarrollado utilizando .NET y los usuarios deben instalar el tiempo de ejecución de .NET Framework. El código de Excel y .NET se integran entre sí mediante el complemento (.xll) que expone el código .NET a Excel. Puede escribir su código en archivos de script basados en texto (.dna) (C#, Visual Basic o F#) o bibliotecas .NET compiladas (.dll).

Previous Next

Primeros pasos con Excel-ADN

La forma recomendada de instalar ExcelDNA es desde NuGet. Utilice el siguiente comando para una instalación más rápida.

Instalar ExcelDNA desde NuGet

 Install-Package ExcelDna.AddIn

Crear funciones de Excel a través de la API de .NET

ExcelDNA brinda a los programadores de C# .NET la competencia para generar funciones de Excel usando C#. También puede usar ExcelFunctionAttributes como Nombre, Descripción, Categoría, IsHidden, IsExceptionSafe y más. El atributo IsMacroType cambia los parámetros que utiliza Excel-DNA al registrar la función.

Cómo crear Utilizar funciones de Excel a través de .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;
    }
}

Compatibilidad con arreglos dinámicos

La API Excel-DNA de .NET de código abierto también admite el uso de matrices dinámicas dentro de Excel. Cuando escribe una fórmula de matriz dinámica, determina si la fórmula tiene el potencial de devolver múltiples valores.

Cómo hacer un Array Auto Resize el resultado a través de 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);
        }
    }

Soporte de diagnóstico

La API de ExcelDNA permite a los desarrolladores de .NET utilizar el registro de diagnóstico mientras trabajan con el complemento de Excel. Excel-DNA utiliza los mecanismos estándar .NET System.Diagnostics.Trace para el registro de diagnóstico.

Log Warnings y Errores dentro de 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!");
 Español