Ir para o conteúdo do rodapé
USANDO O IRONXL

Crie uma API do Excel for .NET Core: Crie, leia e exporte arquivos XLSX.

Construir uma API de Excel for .NET Core é simples com o IronXL. Instale o pacote, crie um WorkBook, preencha as células e retorne o fluxo diretamente -- sem necessidade do Microsoft Office.

Install-Package IronXl.Excel

O IronXL lida com a criação de XLSX, importação de dados, exportações em múltiplos formatos e estilização de células totalmente em código gerenciado .NET. Ele roda em Windows, Linux e macOS, tornando-se uma escolha prática para qualquer API ASP.NET Core que necessita de suporte programático do Excel.

Como Você Instala o IronXL em um Projeto .NET Core?

Adicione o IronXL a qualquer projeto .NET 10 através do Console do Gerenciador de Pacotes NuGet:

Install-Package IronXl.Excel

Ou instale via a interface do NuGet do Visual Studio procurando por IronXl. O nome do pacote no NuGet é IronXl.Excel.

Após a instalação, adicione using IronXL; a qualquer arquivo que crie ou leia planilhas. Nenhuma biblioteca de interop do Office, nenhum registro COM e nenhuma instalação do Microsoft Excel é necessária na máquina host -- o IronXL é totalmente independente.

IronXL tem como alvo o .NET Standard 2.0 e acima, o que significa que a mesma biblioteca funciona para projetos .NET Core, .NET 5/6/7/8/9/10 e .NET Framework. A documentação do IronXL cobre todos os ambientes suportados em detalhes.

Como Criar Arquivos Excel Programaticamente no .NET Core?

Criar documentos Excel do zero requer apenas algumas linhas de código com a API intuitiva do IronXL. A biblioteca fornece controle total sobre livros, planilhas, estilos de células e fórmulas através de um modelo de objeto limpo.

Aqui está uma ação de controlador que cria um novo livro Excel com dados formatados, demonstra o gerenciamento de planilhas e aplica estilos de células:

using IronXL;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
    [HttpGet("create-report")]
    public IActionResult CreateSalesReport()
    {
        // Create a new Excel workbook in XLSX format
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Set header labels in the first row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Q1 Sales";
        worksheet["C1"].Value = "Q2 Sales";
        worksheet["D1"].Value = "Total";

        // Bold headers and apply a blue background with white text
        worksheet["A1:D1"].Style.Font.Bold = true;
        worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
        worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");

        // Add data rows
        worksheet["A2"].Value = "Widget Pro";
        worksheet["B2"].Value = 15000;
        worksheet["C2"].Value = 18500;
        worksheet["D2"].Formula = "=B2+C2";

        worksheet["A3"].Value = "Gadget Plus";
        worksheet["B3"].Value = 22000;
        worksheet["C3"].Value = 24000;
        worksheet["D3"].Formula = "=B3+C3";

        // Apply currency number format to sales columns
        worksheet["B2:D3"].Style.Format = "$#,##0";

        // Stream the XLSX file back to the caller
        var stream = workbook.ToStream();
        return File(
            stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "SalesReport.xlsx");
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
    [HttpGet("create-report")]
    public IActionResult CreateSalesReport()
    {
        // Create a new Excel workbook in XLSX format
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Set header labels in the first row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Q1 Sales";
        worksheet["C1"].Value = "Q2 Sales";
        worksheet["D1"].Value = "Total";

        // Bold headers and apply a blue background with white text
        worksheet["A1:D1"].Style.Font.Bold = true;
        worksheet["A1:D1"].Style.SetBackgroundColor("#4472C4");
        worksheet["A1:D1"].Style.Font.SetColor("#FFFFFF");

        // Add data rows
        worksheet["A2"].Value = "Widget Pro";
        worksheet["B2"].Value = 15000;
        worksheet["C2"].Value = 18500;
        worksheet["D2"].Formula = "=B2+C2";

        worksheet["A3"].Value = "Gadget Plus";
        worksheet["B3"].Value = 22000;
        worksheet["C3"].Value = 24000;
        worksheet["D3"].Formula = "=B3+C3";

        // Apply currency number format to sales columns
        worksheet["B2:D3"].Style.Format = "$#,##0";

        // Stream the XLSX file back to the caller
        var stream = workbook.ToStream();
        return File(
            stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "SalesReport.xlsx");
    }
}
$vbLabelText   $csharpLabel

Arquivo Excel de Saída

Construa uma API Excel for .NET Core: Crie, Leia e Exporte Arquivos XLSX: Imagem 1 - Arquivo Excel gerado pela API .NET Core

WorkBook.Create() suporta ambos os formatos XLSX e XLS. O método CreateWorkSheet() adiciona uma folha nomeada onde você preenche as células com valores, aplica fórmulas do Excel para cálculos e controla o layout através de intervalos de células. O mecanismo de cálculo do IronXL avalia fórmulas automaticamente quando os dados do livro mudam, incluindo suporte para fórmulas em matriz usadas em cenários de análise de dados mais complexos.

Os estilos de células vão além de negrito e cor. A API de formatação de células permite definir formatos de número, bordas, alinhamentos, tamanhos de fonte e muito mais -- tudo sem tocar na camada COM. Isso o torna seguro para rodar dentro de ambientes Linux conteinerizados onde não existe contexto de exibição.

Como Adicionar Várias Planilhas a um Livro?

Um único livro pode conter qualquer número de planilhas. Chame workbook.CreateWorkSheet("SheetName") para cada aba necessária. As planilhas são acessíveis posteriormente pelo nome através de workbook.GetWorkSheet("SheetName") ou pelo índice através de workbook.WorkSheets[0].

Este padrão é útil ao gerar relatórios de resumo e detalhes: uma folha mantém totais agregados enquanto folhas filhas armazenam as linhas de transações brutas. Os documentos de gerenciamento de planilhas explicam a renomeação, reordenação e remoção de folhas em tempo de execução.

Qual é a Melhor Maneira de Ler Dados do Excel em APIs Web?

Importar dados de arquivos Excel enviados por usuários é essencial para qualquer aplicação web que processe conteúdo de planilhas. IronXL torna a leitura de planilhas Excel direta -- carregue de um fluxo, itere linhas e extraia valores digitados de cada célula.

[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = file.OpenReadStream();

    // Load the workbook directly from the upload stream
    WorkBook workbook = WorkBook.Load(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    var records = new List<Dictionary<string, object>>();

    // Start at row 2 to skip the header row
    for (int row = 2; row <= worksheet.RowCount; row++)
    {
        var record = new Dictionary<string, object>
        {
            ["Product"] = worksheet[$"A{row}"].StringValue,
            ["Sales"]   = worksheet[$"B{row}"].DecimalValue,
            ["Date"]    = worksheet[$"C{row}"].DateTimeValue
        };
        records.Add(record);
    }

    return Ok(new {
        message     = "Import successful",
        recordCount = records.Count,
        data        = records
    });
}
[HttpPost("import")]
public IActionResult ImportExcelData(IFormFile file)
{
    if (file == null || file.Length == 0)
        return BadRequest("No file uploaded");

    using var stream = file.OpenReadStream();

    // Load the workbook directly from the upload stream
    WorkBook workbook = WorkBook.Load(stream);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    var records = new List<Dictionary<string, object>>();

    // Start at row 2 to skip the header row
    for (int row = 2; row <= worksheet.RowCount; row++)
    {
        var record = new Dictionary<string, object>
        {
            ["Product"] = worksheet[$"A{row}"].StringValue,
            ["Sales"]   = worksheet[$"B{row}"].DecimalValue,
            ["Date"]    = worksheet[$"C{row}"].DateTimeValue
        };
        records.Add(record);
    }

    return Ok(new {
        message     = "Import successful",
        recordCount = records.Count,
        data        = records
    });
}
$vbLabelText   $csharpLabel

Saída

Construa uma API Excel for .NET Core: Crie, Leia e Exporte Arquivos XLSX: Imagem 2 - Saída mostrando os dados do Excel importados com sucesso

WorkBook.Load() abre arquivos Excel a partir de fluxos, caminhos de arquivo ou matrizes de bytes. As células são acessadas através da sintaxe de indexador worksheet["A1"] ou iterando em um intervalo de células nomeado. IronXL lida automaticamente com a validação de dados e expõe acessadores seguros para tipos -- IntValue, DecimalValue, DateTimeValue, StringValue -- para que o código consumidor permaneça limpo e previsível.

Como Filtrar e Ordenar Dados Importados?

Após carregar uma planilha, chame .SortAscending() ou .SortDescending() em qualquer objeto Range para classificar as linhas. Para filtragem, itere células e avalie condições inline ou transfira dados para uma coleção LINQ para processamento posterior. O guia de ordenação e filtragem demonstra ambas as abordagens com exemplos práticos.

Trabalhando com grandes uploads? IronXL lê apenas as células acessadas, então não há necessidade de carregar um arquivo inteiro de vários megabytes na memória antes de consultar uma coluna específica. Essa abordagem de acesso lento mantém o consumo de memória estável mesmo ao processar livros com dezenas de milhares de linhas.

Como Você Pode Exportar Dados do Excel para Diferentes Formatos?

Aplicações frequentemente precisam oferecer planilhas em múltiplos formatos de saída. IronXL suporta exportação para XLSX, XLS, CSV, JSON e HTML em uma única chamada de método, sem necessidade de ferramentas de conversão externas.

[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
    // Load a pre-designed template workbook
    WorkBook workbook = WorkBook.Load("template.xlsx");

    return format.ToLower() switch
    {
        "xlsx" => File(
            workbook.ToStream(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx"),

        "csv"  => File(
            workbook.ToStream(FileFormat.CSV),
            "text/csv",
            "export.csv"),

        "json" => Ok(workbook.ToJson()),

        _      => BadRequest("Unsupported format")
    };
}
[HttpGet("export/{format}")]
public IActionResult ExportData(string format)
{
    // Load a pre-designed template workbook
    WorkBook workbook = WorkBook.Load("template.xlsx");

    return format.ToLower() switch
    {
        "xlsx" => File(
            workbook.ToStream(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx"),

        "csv"  => File(
            workbook.ToStream(FileFormat.CSV),
            "text/csv",
            "export.csv"),

        "json" => Ok(workbook.ToJson()),

        _      => BadRequest("Unsupported format")
    };
}
$vbLabelText   $csharpLabel

Usar modelos de Excel com layouts predefinidos acelera a geração de relatórios. Carregue um livro pré-desenhado, preencha dados dinâmicos em células ou intervalos nomeados e então transmita o resultado. Esta abordagem se adapta a relatórios de vendas, faturas e documentos de conformidade onde a formatação consistente importa mais do que a flexibilidade.

O suporte multiplataforma do IronXL significa que essas operações de arquivo funcionam de maneira idêntica no Windows, Linux e macOS, tornando-o adequado para implantações conteinerizadas do .NET Core. Leia mais no guia multiplataforma do IronXL.

Como Exportar para CSV de uma API .NET Core?

Chame workbook.ToStream(FileFormat.CSV) e retorne-o com o tipo de conteúdo text/csv, conforme mostrado acima. Para planilhas com várias folhas, cada folha pode ser exportada independentemente acessando workbook.WorkSheets[index] e chamando .ToStream(FileFormat.CSV) no objeto da folha. A documentação de exportação para CSV cobre o manuseio de delimitadores, codificação e opções de formato de data.

Como Aplicar Formatação Condicional e Barras de Dados?

Além de estilos básicos de célula, o IronXL suporta regras de formatação condicional -- destaque células acima de um limiar em verde, marque os negativos em vermelho ou aplique barras de dados em gradiente para tornar as tendências imediatamente visíveis na planilha sem qualquer pós-processamento em uma ferramenta separada.

A formatação condicional é particularmente valiosa em dashboards financeiros e relatórios de indicadores-chave de desempenho onde os leitores precisam detectar discrepâncias rapidamente. Em vez de depender que o destinatário aplique sua própria formatação após o download, as regras viajam incorporadas no arquivo XLSX e são avaliadas automaticamente quando o arquivo é aberto em qualquer versão do Microsoft Excel ou visualizador compatível.

A formatação condicional é definida através da propriedade ConditionalFormatting da planilha. As regras são aplicadas a um intervalo de células nomeado e suportam múltiplos tipos de condições: comparações de valores de célula, regras baseadas em fórmula, escalas de cor que classificam valores de baixo para alto e sobreposições de barra de dados que funcionam como gráficos de barras dentro da célula. A especificação Open XML define a estrutura de regra subjacente que o IronXL escreve no arquivo XLSX.

Para uma referência completa sobre a aplicação de escalas de cores, conjuntos de ícones e barras de dados, consulte o tutorial de formatação condicional na documentação do IronXL.

Como Proteger Arquivos e Planilhas do Excel?

Distribuir relatórios que contêm dados sensíveis requer uma camada de controle de acesso. O IronXL oferece suporte tanto para proteção por senha ao nível do livro quanto para proteção ao nível da planilha:

  • Senha do livro: Defina workbook.Password = "secret" antes de chamar .SaveAs() para criptografar o arquivo XLSX. Os destinatários devem inserir a senha para abri-lo no Excel.
  • Proteção da planilha: Chame worksheet.ProtectSheet("password") para bloquear a edição de células enquanto ainda permite que a folha seja visualizada. Intervalos específicos podem ser desbloqueados para entrada de dados usando a API AllowEditRange.
  • Distribuição somente leitura: Para documentos que nunca devem ser editados, combine a proteção da planilha com a criptografia ao nível do arquivo.

Arquivos XLSX protegidos por senha usam criptografia AES-128 por padrão, o mesmo padrão aplicado pelo Excel nativo. Isto significa que um arquivo protegido através do IronXL é totalmente compatível com o prompt de abertura de arquivo incorporado do Excel -- não é necessário um visualizador especial no lado do destinatário.

Esses recursos de segurança complementam o modelo de segurança padrão do .NET Core e são especialmente úteis ao construir endpoints de relatórios financeiros ou de RH. A documentação de proteção de arquivo fornece a referência completa da API.

Como Trabalhar com Fórmulas do Excel no .NET?

O mecanismo de cálculo embutido do IronXL avalia fórmulas padrão do Excel em tempo de execução, permitindo que a API retorne valores calculados sem salvar no disco e reabrir no Excel. Atribua uma string de fórmula à propriedade .Formula de qualquer célula:

// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";

// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";

// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
// Sum a column and place the result in a footer row
worksheet[$"B{lastRow}"].Formula = $"=SUM(B2:B{lastRow - 1})";

// Calculate an average across a range
worksheet[$"C{lastRow}"].Formula = $"=AVERAGE(C2:C{lastRow - 1})";

// Retrieve the computed value immediately
decimal total = worksheet[$"B{lastRow}"].DecimalValue;
$vbLabelText   $csharpLabel

O IronXL suporta a maioria das funções padrão do Excel, incluindo categorias matemáticas, estatísticas, texto, data e pesquisa. Fórmulas em matriz (semântica Ctrl+Shift+Enter) também são suportadas para cenários avançados. Como a avaliação de fórmulas acontece dentro do processo do .NET, não há ida e volta para um serviço de cálculo externo -- os resultados estão disponíveis imediatamente após a fórmula ser atribuída, o que mantém os tempos de resposta da API previsíveis, mesmo ao calcular em milhares de linhas. A referência de suporte a fórmulas lista todas as funções suportadas.

Quais são os seus próximos passos?

Construir uma API do Excel com IronXL dá aos aplicativos .NET Core capacidades sólidas para trabalhar com planilhas. Desde criar arquivos XLSX com dados formatados e fórmulas calculadas até importar envios de usuários e exportar dados em múltiplos formatos, o IronXL lida com todos os aspectos da manipulação programática de planilhas de forma multiplataforma, sem Office.

Explore estes recursos para aprofundar o seu conhecimento:

Inicie uma avaliação gratuita para testar o IronXL em um projeto ao vivo, ou reveja opções de licenciamento para encontrar o plano certo para implantação em produção.

Perguntas frequentes

O que é IronXL?

IronXL é uma biblioteca .NET para Excel que permite aos desenvolvedores criar, ler e exportar arquivos do Excel programaticamente em C#, sem a necessidade do Microsoft Office ou interoperabilidade COM.

Como criar um arquivo do Excel no .NET Core sem o Office?

Chame WorkBook.Create(ExcelFileFormat.XLSX) para criar uma nova pasta de trabalho, adicione planilhas com CreateWorkSheet(), preencha as células com a sintaxe worksheet['A1'].Value e transmita o resultado com workbook.ToStream().

Como ler um arquivo Excel carregado no ASP.NET Core?

Passe o fluxo IFormFile para WorkBook.Load(stream), acesse a DefaultWorkSheet e itere pelas linhas usando worksheet.RowCount. Acessadores tipados, como DecimalValue e DateTimeValue, extraem dados fortemente tipados de cada célula.

O IronXL consegue exportar dados do Excel para CSV ou JSON?

Sim. Chame workbook.ToStream(FileFormat.CSV) para obter uma saída em CSV ou workbook.ToJson() para uma representação JSON dos dados da planilha.

O IronXL funciona em Linux e macOS?

Sim. O IronXL é compatível com o .NET Standard 2.0 e versões superiores e funciona no Windows, Linux e macOS sem a necessidade de instalação do Microsoft Office ou camada COM.

Como proteger um arquivo do Excel com senha usando o IronXL?

Defina workbook.Password como uma string antes de chamar SaveAs(). Para proteção em nível de planilha, chame worksheet.ProtectSheet('password') para impedir a edição de células, permitindo, ao mesmo tempo, a leitura da planilha.

Jordi Bardia
Engenheiro de Software
Jordi é extremamente proficiente em Python, C# e C++, e quando não está utilizando suas habilidades na Iron Software, dedica-se à programação de jogos. Compartilhando as responsabilidades por testes, desenvolvimento e pesquisa de produtos, Jordi agrega imenso valor à melhoria contínua dos produtos. Essa experiência diversificada o mantém ...
Leia mais

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me