1. Produkty
  2.   Arkusz
  3.   .NET
  4.   ExcelDNA
 
  

Biblioteka Open Source .NET do przetwarzania arkuszy kalkulacyjnych Excel  

ExcelDNA umożliwia tworzenie i wdrażanie dodatków Excel przy użyciu C#, F# lub VB .NET.

Excel-DNA to interfejs API typu open source do integracji platformy .NET z programem Excel. Interfejs API umożliwia tworzenie wysokowydajnych funkcji zdefiniowanych przez użytkownika (UDF) i nie tylko w natywnych dodatkach (.xll) do programu Excel. Nie potrzebujesz żadnej instalacji ani rejestracji, cały dodatek można spakować do jednego pliku .xll.

Środowisko wykonawcze Excel-DNA jest bezpłatne do dowolnego użytku i jest rozpowszechniane na podstawie liberalnej licencji typu open source, która umożliwia również wykorzystanie komercyjne. Został opracowany przy użyciu platformy .NET, a użytkownicy muszą zainstalować środowisko uruchomieniowe .NET Framework. Program Excel i kod .NET integrują się ze sobą za pomocą dodatku (.xll), który udostępnia kod .NET w programie Excel. Kod można napisać w tekstowych (.dna) plikach skryptów (C#, Visual Basic lub F#) lub skompilowanych bibliotekach .NET (.dll).

Previous Next

Pierwsze kroki z Excel-DNA

Zalecany sposób instalacji ExcelDNA pochodzi z NuGet. Użyj następującego polecenia, aby przyspieszyć instalację.

Zainstaluj ExcelDNA z NuGet

 Install-Package ExcelDna.AddIn

Twórz funkcje Excela za pomocą .NET API

ExcelDNA daje programistom C# .NET kompetencję generowania funkcji Excela przy użyciu C#. Możesz również użyć atrybutów ExcelFunctionAttributes, takich jak Nazwa, Opis, Kategoria, IsHidden, IsExceptionSafe i nie tylko. Atrybut IsMacroType zmienia parametry używane przez Excel-DNA podczas rejestrowania funkcji.

Jak tworzyć i używać funkcji Excel poprzez .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;
    }
}

Obsługa tablic dynamicznych

Open source .NET API Excel-DNA obsługuje również użycie tablic dynamicznych w programie Excel. Podczas pisania dynamicznej formuły tablicowej określa ona, czy formuła może zwrócić wiele wartości.

Jak zrobić Array & Auto Resize Result przez 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);
        }
    }

Diagnostyczne wsparcie logowania

Interfejs API ExcelDNA umożliwia programistom platformy .NET korzystanie z rejestrowania diagnostycznego podczas pracy z dodatkiem Excel. Excel-DNA używa standardowych mechanizmów .NET System.Diagnostics.Trace do rejestrowania diagnostycznego.

Log Ostrzeżenia i błędy wewnątrz 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!");
 Polski