1. Produtos
  2.   Planilha
  3.   .NET
  4.   ExcelDNA
 
  

Biblioteca .NET de código aberto para processamento de planilhas do Excel  

O ExcelDNA permite criar e implantar suplementos do Excel usando C#, F# ou VB .NET.

Excel-DNA é uma API de código aberto para integrar .NET ao Excel. A API permite que você crie funções definidas pelo usuário (UDFs) de alto desempenho e muito mais em seus suplementos nativos (.xll) para Excel. Você não precisa de nenhuma instalação ou registro, todo o seu suplemento pode ser compactado em um único .xll.

O Excel-DNA Runtime é gratuito para todos os usos e é distribuído sob uma licença de código aberto permissiva que também permite o uso comercial. Ele é desenvolvido usando .NET e os usuários precisam instalar o runtime do .NET Framework. O Excel e o código .NET se integram entre si usando Add-In (.xll) que expõe o código .NET ao Excel. Você pode escrever seu código em arquivos de script baseados em texto (.dna) (C#, Visual Basic ou F#) ou bibliotecas .NET compiladas (.dll).

Previous Next

Introdução ao Excel-DNA

A maneira recomendada de instalar o ExcelDNA é do NuGet, use o seguinte comando para uma instalação mais rápida.

Instale o ExcelDNA do NuGet

 Install-Package ExcelDna.AddIn

Criar funções do Excel por meio da API .NET

ExcelDNA dá aos programadores C# .NET a competência para gerar funções do Excel usando C#. Você também pode usar ExcelFunctionAttributes como Name, Description, Category, IsHidden, IsExceptionSafe e muito mais. O atributo IsMacroType altera os parâmetros que o Excel-DNA usa ao registrar a função.

Como e usar as do Excel atravé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;
    }
}

Suporte para matrizes dinâmicas

A API .NET de código aberto Excel-DNA também suporta o uso de matrizes dinâmicas dentro do Excel. Quando você escreve uma fórmula de matriz dinâmica, ela determina se a fórmula tem o potencial de retornar vários valores.

Como fazer um array & Auto o resultado através 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);
        }
    }

Suporte de Logging diagnóstico

A API ExcelDNA permite que os desenvolvedores .NET usem o log de diagnóstico enquanto trabalham com o Suplemento do Excel. O Excel-DNA usa os mecanismos padrão .NET System.Diagnostics.Trace para log de diagnóstico.

Avisos de e dentro do 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!");
 Português