Библиотека .NET с открытым исходным кодом для обработки электронных таблиц Excel
ExcelDNA позволяет создавать и развертывать надстройки Excel с помощью C#, F# или VB .NET.
Excel-DNA — это API с открытым исходным кодом для интеграции .NET в Excel. API позволяет создавать высокопроизводительные пользовательские функции (UDF) и многое другое в собственных надстройках (.xll) для Excel. Вам не нужна никакая установка или регистрация, вся ваша надстройка может быть упакована в один .xll.
Среда выполнения Excel-DNA бесплатна для любого использования и распространяется по разрешающей лицензии с открытым исходным кодом, которая также разрешает коммерческое использование. Он разработан с использованием .NET, и пользователям необходимо установить среду выполнения .NET Framework. Код Excel и .NET интегрируются друг с другом с помощью надстройки (.xll), которая предоставляет код .NET для Excel. Вы можете писать свой код в текстовых (.dna) файлах сценариев (C#, Visual Basic или F#) или скомпилированных библиотеках .NET (.dll).
Начало работы с Excel-ДНК
Рекомендуемый способ установки ExcelDNA - NuGet, пожалуйста, используйте следующую команду для более быстрой установки.
Установите ExcelDNA из NuGet
Install-Package ExcelDna.AddIn
Создание функций Excel через .NET API
ExcelDNA дает программистам C# .NET возможность создавать функции Excel с помощью C#. Вы также можете использовать атрибуты ExcelFunctionAttributes, такие как Name, Description, Category, IsHidden, IsExceptionSafe и другие. Атрибут IsMacroType изменяет параметры, используемые Excel-DNA при регистрации функции.
Как создавать и использовать функции Excel через .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;
}
}
Поддержка динамических массивов
.NET API Excel-DNA с открытым исходным кодом также поддерживает использование динамических массивов внутри Excel. Когда вы пишете формулу динамического массива, она определяет, может ли формула вернуть несколько значений.
Как заставить Array & Auto изменить результат через 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);
}
}
Поддержка диагностики
API ExcelDNA позволяет разработчикам .NET использовать ведение журнала диагностики при работе с надстройкой Excel. Excel-DNA использует стандартные механизмы .NET System.Diagnostics.Trace для ведения журналов диагностики.
Предупреждения и ошибки внутри добавления
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!");