.NET библиотека с отворен код за обработка на електронни таблици в Excel  

ExcelDNA ви позволява да създавате и внедрявате добавки на Excel с помощта на C#, F# или VB .NET.

Excel-DNA е API с отворен код за интегриране на .NET в Excel. API ви позволява да създавате високопроизводителни дефинирани от потребителя функции (UDF) и други във вашите собствени (.xll) добавки за Excel. Не се нуждаете от инсталация или регистрация, цялата ви добавка може да бъде пакетирана в един .xll.

Excel-DNA Runtime е безплатен за всякаква употреба и се разпространява под разрешителен лиценз за отворен код, който позволява и комерсиална употреба. Той е разработен с помощта на .NET и потребителите трябва да инсталират средата за изпълнение на .NET Framework. Excel и .NET кодът се интегрират един с друг с помощта на добавка (.xll), която излага .NET кода на excel. Можете да напишете кода си в текстови (.dna) скриптови файлове (C#, Visual Basic или F#) или компилирани .NET библиотеки (.dll).

Previous Next

Първи стъпки с Excel-DNA

Препоръчителният начин за инсталиране на ExcelDNA е от NuGet. Моля, използвайте следната команда за по-бързо инсталиране.

Инсталирайте ExcelDNA от NuGet

 Install-Package ExcelDna.AddIn

Създавайте Excel функции чрез .NET API

ExcelDNA дава на C# .NET програмистите компетентността да генерират функции на Excel с помощта на C#. Можете също да използвате ExcelFunctionAttributes като име, описание, категория, 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 Result чрез 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);
        }
    }

Диагностична логическа поддръжка

ExcelDNA API позволява на .NET разработчиците да използват диагностично регистриране, докато работят с Excel Add-In. 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!");
 Български