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).
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!");