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

Como gerar um arquivo Excel em C# usando o IronXL

A geração programática de arquivos de planilha Excel em C# ou Visual Basic exigia tradicionalmente uma instalação do Microsoft Office ou interoperabilidade COM complexa. IronXL muda isso completamente, oferecendo uma API simples que cria arquivos de aplicativos Excel sem dependências do Office. Este tutorial guia você na construção de arquivos Excel em C# usando IronXL, desde a criação básica de planilhas até formatação avançada e integração com bancos de dados. Seja criando relatórios, exportando dados (arquivos XLS ou arquivos XLSX) ou automatizando a geração de planilhas, você aprenderá as técnicas essenciais para trabalhar com Excel em aplicativos .NET.

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 1 - IronXL

Por Que Gerar Arquivos de Planilha Excel Sem o Microsoft Office?

Desenvolver funcionalidades de geração de Excel sem dependências do Office resolve desafios críticos de implantação. Ambientes de servidor raramente têm o Microsoft Office instalado devido a custos de licenciamento e uso elevado de recursos. Cada instalação do Office requer espaço significativo em disco e memória, tornando-se impraticável para implantações em nuvem ou aplicativos contêinerizados.

IronXL elimina essas restrições operando de forma independente. Sua geração de arquivo Excel em C# roda em Windows, Linux, macOS, contêineres Docker ou Azure App Services sem modificação. Essa compatibilidade multiplataforma significa que você escreve uma vez e implanta em qualquer lugar, seja direcionando .NET Framework, .NET Core ou aplicações .NET 8/9.

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 2 - Multiplataforma

O desempenho melhora drasticamente sem a sobrecarga de COM Interop. A automação tradicional do Office cria instâncias de processo separadas para cada operação, consumindo memória e recursos da CPU. IronXL processa tudo em memória dentro do espaço de processo do seu aplicativo, resultando em execução mais rápida e menor consumo de recursos quando você gera arquivos Excel programaticamente.

A implantação se torna simples, pois IronXL é fornecido como um único pacote NuGet. Sem entradas de registro, nenhum registro COM e nenhum service pack do Office para manter. Suas pipelines de integração contínua funcionam perfeitamente, e os containers Docker permanecem leves. Essa abordagem simplificada tornou o IronXL uma escolha popular, conforme discutido em vários fóruns de desenvolvedores onde profissionais compartilham suas experiências com automação de Excel.

Alguns desenvolvedores ainda exploram a Ferramenta de Produtividade do Open XML da Microsoft para trabalhar diretamente com estruturas de arquivos Open XML do Office. No entanto, essa abordagem requer mais esforço manual e conhecimento detalhado do esquema XML e da instalação do Open XML SDK. IronXL abstrai essas complexidades, oferecendo um caminho muito mais rápido para trabalhar com Excel programaticamente.

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 3 - Funcionalidades

Como Instalar o IronXL em Seu Projeto C#?

Instalar o IronXL leva apenas alguns momentos através do Gerenciador de Pacotes NuGet no Solution Explorer. No Visual Studio, clique com o botão direito no seu projeto e selecione "Gerenciar Pacotes NuGet". Procure por "IronXl.Excel" e clique em Instalar. O pacote inclui automaticamente todas as dependências necessárias para gerar arquivos Excel em C#.

Alternativamente, utilize o Console do Gerenciador de Pacotes:

Install-Package IronXl.Excel

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 4 - Instalação

Para usuários de .NET CLI que trabalham com projetos modernos de C#:

dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

Verifique a instalação com este teste simples para criar um arquivo Excel programaticamente:

using IronXL;
// Create a new Excel workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
using IronXL;
// Create a new Excel workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
$vbLabelText   $csharpLabel

Este código cria um objeto de workbook na memória. Se executar sem erros, o IronXL está pronto para uso. A biblioteca suporta todas as versões modernas do .NET, garantindo compatibilidade com seus projetos existentes. Para orientações detalhadas de instalação e solução de problemas, consulte a documentação oficial. Pronto para começar? Baixe o IronXL agora e comece a gerar arquivos Excel em minutos.

Saída

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 5 - Saída do Console

Como Criar Seu Primeiro Arquivo Excel?

A criação de arquivos Excel com IronXL começa com a classe WorkBook, sua porta de entrada para todas as operações Excel. A biblioteca suporta formatos modernos XLSX e legados XLS, dando-lhe flexibilidade para diferentes requisitos ao gerar arquivos Excel em C#.

using IronXL;
// Create a new workbook (XLSX format by default)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Title = "Monthly Sales Report";
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Comments = "Generated using IronXL";
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("January Sales");
// Add some basic data
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
// Add data rows
worksheet["A2"].Value = new DateTime(2024, 1, 15);
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 100;
worksheet["D2"].Value = 2500.00;
// Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx");
using IronXL;
// Create a new workbook (XLSX format by default)
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add metadata
workbook.Metadata.Title = "Monthly Sales Report";
workbook.Metadata.Author = "Sales Department";
workbook.Metadata.Comments = "Generated using IronXL";
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("January Sales");
// Add some basic data
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
// Add data rows
worksheet["A2"].Value = new DateTime(2024, 1, 15);
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 100;
worksheet["D2"].Value = 2500.00;
// Save the workbook
workbook.SaveAs("FirstExcelFile.xlsx");
$vbLabelText   $csharpLabel

Este código demonstra vários conceitos-chave para geração de arquivos Excel. O método WorkBook.Create() inicializa um novo arquivo Excel na memória. Você especifica o formato usando o enum ExcelFileFormat - escolha XLSX para compatibilidade com Excel moderno ou XLS para suporte legado. A propriedade Metadata permite que você incorpore informações do documento que aparecem nas propriedades do arquivo do Excel, aderindo aos padrões de propriedade de documento da Microsoft.

O método CreateWorkSheet() adiciona uma nova planilha com o nome especificado. A notação familiar de células do Excel (A1, B1, etc.) torna a configuração de valores intuitiva. O IronXL trata automaticamente da conversão de tipos de dados, reconhecendo datas, números e texto sem conversão explícita. O método SaveAs() escreve o arquivo Excel completo no disco. Para mais operações de planilha, explore o tutorial de gerenciamento de planilhas.

Saída

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 6 - Saída Básica de Excel

Como Escrever Dados em Células do Excel?

IronXL fornece várias abordagens para preencher células do Excel, desde a atribuição individual de células até operações de intervalo em massa. Entender esses métodos ajuda você a escolher a abordagem mais eficiente para seu cenário de dados.

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Individual cell assignment
worksheet["A1"].Value = "Employee Name";
worksheet["A2"].Value = "John Smith";
worksheet["A3"].Value = "Jane Doe";
// Range assignment for multiple cells
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based population
string[] headers = { "ID", "Name", "Email", "Phone" };
for (int i = 0; i < headers.Length; i++)
{
    worksheet.SetCellValue(0, i, headers[i]);
}
// Working with different data types
worksheet["E1"].Value = "Salary";
worksheet["E2"].Value = 75000.50m;  // Decimal for currency
worksheet["E3"].Value = 82000.75m;
worksheet["F1"].Value = "Start Date";
worksheet["F2"].Value = new DateTime(2020, 3, 15);
worksheet["F3"].Value = new DateTime(2019, 7, 1);
worksheet["G1"].Value = "Full Time";
worksheet["G2"].Value = true;  // Boolean
worksheet["G3"].Value = true;
workbook.SaveAs("FirstExcelFile.xlsx");
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Individual cell assignment
worksheet["A1"].Value = "Employee Name";
worksheet["A2"].Value = "John Smith";
worksheet["A3"].Value = "Jane Doe";
// Range assignment for multiple cells
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based population
string[] headers = { "ID", "Name", "Email", "Phone" };
for (int i = 0; i < headers.Length; i++)
{
    worksheet.SetCellValue(0, i, headers[i]);
}
// Working with different data types
worksheet["E1"].Value = "Salary";
worksheet["E2"].Value = 75000.50m;  // Decimal for currency
worksheet["E3"].Value = 82000.75m;
worksheet["F1"].Value = "Start Date";
worksheet["F2"].Value = new DateTime(2020, 3, 15);
worksheet["F3"].Value = new DateTime(2019, 7, 1);
worksheet["G1"].Value = "Full Time";
worksheet["G2"].Value = true;  // Boolean
worksheet["G3"].Value = true;
workbook.SaveAs("FirstExcelFile.xlsx");
$vbLabelText   $csharpLabel

O código mostra o endereçamento flexível de células do IronXL. A notação de string ("A1") é natural para usuários de Excel, enquanto índices numéricos oferecem controle programático para loops e geração dinâmica. Atribuições de intervalos ("B1:B3") definem várias células para o mesmo valor de forma eficiente, perfeito para inicializar colunas ou aplicar valores padrão.

IronXL lida de maneira inteligente com diferentes tipos de dados. Decimais mantêm precisão para dados financeiros, objetos DateTime formatam corretamente como datas do Excel, e booleanos aparecem como VERDADEIRO/FALSO. Essa conversão automática elimina código de formatação manual enquanto garante a integridade dos dados.

Saída

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 7 - Saída de Excel

Para conjuntos de dados maiores, considere este padrão:

// Populate from a data source
var employees = GetEmployeeData(); // Your data source
for (int row = 0; row < employees.Count; row++)
{
    worksheet[$"A{row + 2}"].Value = employees[row].Id;
    worksheet[$"B{row + 2}"].Value = employees[row].Name;
    worksheet[$"C{row + 2}"].Value = employees[row].Department;
    worksheet[$"D{row + 2}"].Value = employees[row].Salary;
}
// Populate from a data source
var employees = GetEmployeeData(); // Your data source
for (int row = 0; row < employees.Count; row++)
{
    worksheet[$"A{row + 2}"].Value = employees[row].Id;
    worksheet[$"B{row + 2}"].Value = employees[row].Name;
    worksheet[$"C{row + 2}"].Value = employees[row].Department;
    worksheet[$"D{row + 2}"].Value = employees[row].Salary;
}
$vbLabelText   $csharpLabel

Esta abordagem itera pela sua coleção de dados, mapeando cada propriedade para sua coluna correspondente. A interpolação de strings ($"A{row + 2}") gera dinamicamente endereços de células, começando da linha 2 para preservar os cabeçalhos.

Como Aplicar Formatação Profissional?

Arquivos Excel profissionais exigem mais do que dados brutos. A API de estilização da IronXL transforma planilhas simples em documentos empresariais polidos através de formatação, cores e hierarquia visual quando você gera arquivos Excel em C#.

using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Header formatting
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
// Column width adjustment
worksheet.AutoSizeColumn(0); // Auto-fit column A
worksheet.GetColumn(1).Width = 20; // Set column B to 20 characters
// Number formatting
var salaryColumn = worksheet["E2:E3"];
salaryColumn.FormatString = "$#,##0.00";
// Date formatting
var dateColumn = worksheet["F2:F3"];
dateColumn.FormatString = "MM/dd/yyyy";
// Cell borders
var dataRange = worksheet["A1:G3"];
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin;
// To set border color, use:
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
dataRange.Style.LeftBorder.Color = "#000000";
dataRange.Style.RightBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability
for (int row = 2; row <= 3; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Create a worksheet
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Header formatting
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.Font.Height = 12;
headerRange.Style.SetBackgroundColor("#4472C4");
headerRange.Style.Font.Color = "#FFFFFF";
// Column width adjustment
worksheet.AutoSizeColumn(0); // Auto-fit column A
worksheet.GetColumn(1).Width = 20; // Set column B to 20 characters
// Number formatting
var salaryColumn = worksheet["E2:E3"];
salaryColumn.FormatString = "$#,##0.00";
// Date formatting
var dateColumn = worksheet["F2:F3"];
dateColumn.FormatString = "MM/dd/yyyy";
// Cell borders
var dataRange = worksheet["A1:G3"];
dataRange.Style.TopBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.BottomBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.LeftBorder.Type = IronXl.Styles.BorderType.Thin;
dataRange.Style.RightBorder.Type = IronXl.Styles.BorderType.Thin;
// To set border color, use:
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
dataRange.Style.LeftBorder.Color = "#000000";
dataRange.Style.RightBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability
for (int row = 2; row <= 3; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
$vbLabelText   $csharpLabel

Este código de formatação cria uma aparência profissional que atende aos padrões empresariais. Cabeçalhos em negrito com cores de fundo estabelecem hierarquia visual. O método SetBackgroundColor() aceita códigos de cores hexadecimais, oferecendo controle preciso sobre seu esquema de cores. Propriedades de fonte incluem tamanho, cor, negrito, itálico e opções de sublinhado, todos essenciais para criar arquivos Excel que correspondem às diretrizes de branding corporativo.

Ajustes na largura das colunas evitam o truncamento de texto. AutoSizeColumn() ajusta automaticamente o conteúdo, enquanto SetColumnWidth() oferece controle exato. A formatação de números utiliza os códigos de formato do Excel. Por exemplo, "$#,##0.00" exibe moeda com separadores de milhar e duas casas decimais. A formatação de datas segue padrões similares, usando cadeias de formato de data padrão do Excel, conforme documentado nas especificações do Excel da Microsoft.

Bordas definem limites de dados, melhorando a legibilidade. O enum BorderType oferece vários estilos: fino, médio, grosso, pontilhado e tracejado. As opções de alinhamento centralizam cabeçalhos e alinham números à direita, seguindo convenções de planilhas. Cores de linhas alternadas, muitas vezes chamadas de "linhas bandas", ajudam os leitores a acompanhar informações em conjuntos de dados amplos. Saiba mais sobre formatação avançada para criar dados do Excel formatados em nosso guia de estilo de células.

Saída

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 8 - Saída de Excel Formatada

Como Usar Fórmulas do Excel Programaticamente?

Fórmulas do Excel trazem planilhas à vida com cálculos automáticos. O IronXL oferece suporte à criação e avaliação de fórmulas, permitindo planilhas dinâmicas que se atualizam automaticamente.

var workbook = WorkBook.Create();
// Create a budget worksheet
WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget");
// Headers
budget["A1"].Value = "Category";
budget["B1"].Value = "January";
budget["C1"].Value = "February";
budget["D1"].Value = "March";
budget["E1"].Value = "Q1 Total";
// Budget categories and values
string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" };
decimal[,] monthlyBudgets = {
    { 50000, 52000, 51000 },
    { 15000, 18000, 20000 },
    { 8000, 8500, 9000 },
    { 12000, 5000, 7000 },
    { 3000, 3500, 4000 }
};
// Populate data
for (int i = 0; i < categories.Length; i++)
{
    budget[$"A{i + 2}"].Value = categories[i];
    budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0];
    budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1];
    budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2];
    // Row total formula
    budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})";
}
// Monthly totals row
budget["A7"].Value = "Monthly Total";
budget["B7"].Formula = "=SUM(B2:B6)";
budget["C7"].Formula = "=SUM(C2:C6)";
budget["D7"].Formula = "=SUM(D2:D6)";
budget["E7"].Formula = "=SUM(E2:E6)";
// Calculate percentages
budget["A9"].Value = "Marketing %";
budget["B9"].Formula = "=B3/B7*100";
budget["C9"].Formula = "=C3/C7*100";
budget["D9"].Formula = "=D3/D7*100";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
var workbook = WorkBook.Create();
// Create a budget worksheet
WorkSheet budget = workbook.CreateWorkSheet("Q1 Budget");
// Headers
budget["A1"].Value = "Category";
budget["B1"].Value = "January";
budget["C1"].Value = "February";
budget["D1"].Value = "March";
budget["E1"].Value = "Q1 Total";
// Budget categories and values
string[] categories = { "Salaries", "Marketing", "Operations", "Equipment", "Training" };
decimal[,] monthlyBudgets = {
    { 50000, 52000, 51000 },
    { 15000, 18000, 20000 },
    { 8000, 8500, 9000 },
    { 12000, 5000, 7000 },
    { 3000, 3500, 4000 }
};
// Populate data
for (int i = 0; i < categories.Length; i++)
{
    budget[$"A{i + 2}"].Value = categories[i];
    budget[$"B{i + 2}"].Value = monthlyBudgets[i, 0];
    budget[$"C{i + 2}"].Value = monthlyBudgets[i, 1];
    budget[$"D{i + 2}"].Value = monthlyBudgets[i, 2];
    // Row total formula
    budget[$"E{i + 2}"].Formula = $"=SUM(B{i + 2}:D{i + 2})";
}
// Monthly totals row
budget["A7"].Value = "Monthly Total";
budget["B7"].Formula = "=SUM(B2:B6)";
budget["C7"].Formula = "=SUM(C2:C6)";
budget["D7"].Formula = "=SUM(D2:D6)";
budget["E7"].Formula = "=SUM(E2:E6)";
// Calculate percentages
budget["A9"].Value = "Marketing %";
budget["B9"].Formula = "=B3/B7*100";
budget["C9"].Formula = "=C3/C7*100";
budget["D9"].Formula = "=D3/D7*100";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
$vbLabelText   $csharpLabel

Este exemplo de orçamento ilustra a aplicação prática de fórmulas. A propriedade de Fórmula aceita a sintaxe padrão de fórmulas do Excel, começando com um sinal de igual. IronXL suporta funções comuns: SUM, AVERAGE, COUNT, MAX, MIN, entre muitas outras. Referências de células em fórmulas funcionam exatamente como no Excel, incluindo referências relativas e absolutas.

As fórmulas de total de linhas (=SUM(B{i + 2}:D{i + 2})) calculam totais trimestrais para cada categoria. A interpolação de strings gera dinamicamente as referências de células corretas para cada linha. Os totais mensais somam colunas inteiras, enquanto os cálculos de porcentagem dividem células específicas pelos totais.

O método EvaluateAll() processa todas as fórmulas, atualizando valores calculados em todo o livro. Isto garante que as fórmulas exibem resultados quando abertas no Excel. Sem avaliação, o Excel mostraria as fórmulas até que o usuário provocasse uma nova avaliação.

Saída

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 9 - Saída de Excel usando Fórmulas

Como Exportar Dados de Bancos de Dados para Excel?

Aplicações do mundo real muitas vezes exportam dados de banco de dados para o Excel para relatórios e análises. O IronXL simplifica este processo com suporte integrado DataTable, eliminando a necessidade de mapeamento de campos manual ao gerar arquivos Excel de aplicações C#.

using System;
using System.Data;
using System.Data.SqlClient;
// Simulate database retrieval (replace with your actual database code)
DataTable GetSalesData()
{
    DataTable dt = new DataTable("Sales");
    dt.Columns.Add("OrderID", typeof(int));
    dt.Columns.Add("CustomerName", typeof(string));
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Quantity", typeof(int));
    dt.Columns.Add("UnitPrice", typeof(decimal));
    dt.Columns.Add("OrderDate", typeof(DateTime));
    // Sample data (normally from database)
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5));
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4));
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3));
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2));
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1));
    return dt;
}
// Export to Excel
WorkBook reportWorkbook = WorkBook.Create();
WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report");
// Get data from database
DataTable salesData = GetSalesData();
// Method 1: Manual mapping with formatting
reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy");
reportSheet.Merge("A1:F1");
reportSheet["A1"].Style.Font.Bold = true;
reportSheet["A1"].Style.Font.Height = 14;
// Headers
int headerRow = 3;
for (int col = 0; col < salesData.Columns.Count; col++)
{
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName);
}
// Format headers
var headers = reportSheet[$"A{headerRow}:F{headerRow}"];
headers.Style.Font.Bold = true;
headers.Style.SetBackgroundColor("#D9E1F2");
// Data rows
for (int row = 0; row < salesData.Rows.Count; row++)
{
    for (int col = 0; col < salesData.Columns.Count; col++)
    {
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]);
    }
    // Add total column with formula
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}
// Add total header and format
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency columns
reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
// Format date column
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";
// Add summary section
int summaryRow = headerRow + salesData.Rows.Count + 2;
reportSheet[$"A{summaryRow}"].Value = "Summary";
reportSheet[$"A{summaryRow}"].Style.Font.Bold = true;
reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:";
reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})";
reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:";
reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})";
reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00";
// Auto-fit columns
for (int col = 0; col <= 6; col++)
{
    reportSheet.AutoSizeColumn(col);
}
// Evaluate formulas and save
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
using System;
using System.Data;
using System.Data.SqlClient;
// Simulate database retrieval (replace with your actual database code)
DataTable GetSalesData()
{
    DataTable dt = new DataTable("Sales");
    dt.Columns.Add("OrderID", typeof(int));
    dt.Columns.Add("CustomerName", typeof(string));
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Quantity", typeof(int));
    dt.Columns.Add("UnitPrice", typeof(decimal));
    dt.Columns.Add("OrderDate", typeof(DateTime));
    // Sample data (normally from database)
    dt.Rows.Add(1001, "ABC Corp", "Widget Pro", 50, 25.99m, DateTime.Now.AddDays(-5));
    dt.Rows.Add(1002, "XYZ Ltd", "Widget Basic", 100, 15.99m, DateTime.Now.AddDays(-4));
    dt.Rows.Add(1003, "ABC Corp", "Widget Premium", 25, 45.99m, DateTime.Now.AddDays(-3));
    dt.Rows.Add(1004, "Tech Solutions", "Widget Pro", 75, 25.99m, DateTime.Now.AddDays(-2));
    dt.Rows.Add(1005, "XYZ Ltd", "Widget Premium", 30, 45.99m, DateTime.Now.AddDays(-1));
    return dt;
}
// Export to Excel
WorkBook reportWorkbook = WorkBook.Create();
WorkSheet reportSheet = reportWorkbook.CreateWorkSheet("Sales Report");
// Get data from database
DataTable salesData = GetSalesData();
// Method 1: Manual mapping with formatting
reportSheet["A1"].Value = "Order Report - " + DateTime.Now.ToString("MMMM yyyy");
reportSheet.Merge("A1:F1");
reportSheet["A1"].Style.Font.Bold = true;
reportSheet["A1"].Style.Font.Height = 14;
// Headers
int headerRow = 3;
for (int col = 0; col < salesData.Columns.Count; col++)
{
    reportSheet.SetCellValue(headerRow - 1, col, salesData.Columns[col].ColumnName);
}
// Format headers
var headers = reportSheet[$"A{headerRow}:F{headerRow}"];
headers.Style.Font.Bold = true;
headers.Style.SetBackgroundColor("#D9E1F2");
// Data rows
for (int row = 0; row < salesData.Rows.Count; row++)
{
    for (int col = 0; col < salesData.Columns.Count; col++)
    {
        reportSheet.SetCellValue(row + headerRow, col, salesData.Rows[row][col]);
    }
    // Add total column with formula
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}
// Add total header and format
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency columns
reportSheet[$"E{headerRow + 1}:E{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
reportSheet[$"G{headerRow + 1}:G{headerRow + salesData.Rows.Count}"].FormatString = "$#,##0.00";
// Format date column
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";
// Add summary section
int summaryRow = headerRow + salesData.Rows.Count + 2;
reportSheet[$"A{summaryRow}"].Value = "Summary";
reportSheet[$"A{summaryRow}"].Style.Font.Bold = true;
reportSheet[$"A{summaryRow + 1}"].Value = "Total Orders:";
reportSheet[$"B{summaryRow + 1}"].Formula = $"=COUNTA(A{headerRow + 1}:A{headerRow + salesData.Rows.Count})";
reportSheet[$"A{summaryRow + 2}"].Value = "Total Revenue:";
reportSheet[$"B{summaryRow + 2}"].Formula = $"=SUM(G{headerRow + 1}:G{headerRow + salesData.Rows.Count})";
reportSheet[$"B{summaryRow + 2}"].FormatString = "$#,##0.00";
// Auto-fit columns
for (int col = 0; col <= 6; col++)
{
    reportSheet.AutoSizeColumn(col);
}
// Evaluate formulas and save
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
$vbLabelText   $csharpLabel

Este exemplo abrangente demonstra um fluxo de trabalho completo de banco de dados para Excel para gerar arquivos Excel em C#. O DataTable simula a recuperação do banco de dados - em produção, substitua isso por suas consultas de banco de dados reais usando Entity Framework, Dapper ou ADO.NET. A abordagem de mapeamento manual oferece controle completo sobre formatação e layout, conforme recomendado pelas melhores práticas de exportação de dados da Microsoft.

O código cria um relatório profissional com um título, cabeçalhos formatados e linhas de dados. Colunas de fórmulas calculam totais das linhas dinamicamente. A seção de resumo utiliza fórmulas do Excel para contar pedidos e somar receita, garantindo que esses valores sejam atualizados se os dados mudarem. A formatação de moeda e data segue os padrões de documentos comerciais, enquanto o ajuste automático de colunas garante que todo o conteúdo seja exibido corretamente. Para lidar com conjuntos de dados maiores, explore nosso guia de otimização de desempenho.

Saída

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 10 - Exportação de Banco de Dados para Saída de Excel

Precisa simplificar seus relatórios no Excel? Obtenha uma licença para desbloquear todo o potencial do IronXL para implantações em produção.

Como Manipular Múltiplas Planilhas?

Arquivos Excel complexos frequentemente exigem várias planilhas para organizar dados relacionados. IronXL simplifica o gerenciamento de múltiplas planilhas com métodos intuitivos para criar, acessar e organizar planilhas.

// Create a multi-sheet workbook
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet hrSheet = companyReport.CreateWorkSheet("HR Metrics");
// Populate Sales sheet
salesSheet["A1"].Value = "Sales Dashboard";
salesSheet["A3"].Value = "Region";
salesSheet["B3"].Value = "Q1 Sales";
salesSheet["C3"].Value = "Q2 Sales";
string[] regions = { "North", "South", "East", "West" };
decimal[] q1Sales = { 250000, 180000, 220000, 195000 };
decimal[] q2Sales = { 275000, 195000, 240000, 210000 };
for (int i = 0; i < regions.Length; i++)
{
    salesSheet[$"A{i + 4}"].Value = regions[i];
    salesSheet[$"B{i + 4}"].Value = q1Sales[i];
    salesSheet[$"C{i + 4}"].Value = q2Sales[i];
}
// Populate Inventory sheet
inventorySheet["A1"].Value = "Inventory Status";
inventorySheet["A3"].Value = "Product";
inventorySheet["B3"].Value = "Stock Level";
inventorySheet["C3"].Value = "Reorder Point";
inventorySheet["D3"].Value = "Status";
// Add inventory data with conditional status
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] stock = { 150, 45, 200 };
int[] reorderPoint = { 100, 50, 75 };
for (int i = 0; i < products.Length; i++)
{
    inventorySheet[$"A{i + 4}"].Value = products[i];
    inventorySheet[$"B{i + 4}"].Value = stock[i];
    inventorySheet[$"C{i + 4}"].Value = reorderPoint[i];
    // Status based on stock level
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    // Color code status
    if (status == "REORDER")
    {
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
    }
}
// Create summary sheet referencing other sheets
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");
summarySheet["A1"].Value = "Company Overview";
summarySheet["A3"].Value = "Metric";
summarySheet["B3"].Value = "Value";
summarySheet["A4"].Value = "Total Q1 Sales";
summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)";
summarySheet["A5"].Value = "Total Q2 Sales";
summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)";
summarySheet["A6"].Value = "Products Need Reorder";
summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")";
// Format all sheets consistently
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    // Format headers
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
    var headerRow = sheet["A3:D3"];
    headerRow.Style.Font.Bold = true;
    headerRow.Style.SetBackgroundColor("#E7E6E6");
}
// Save multi-sheet workbook
companyReport.SaveAs("CompanyReport.xlsx");
// Create a multi-sheet workbook
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet hrSheet = companyReport.CreateWorkSheet("HR Metrics");
// Populate Sales sheet
salesSheet["A1"].Value = "Sales Dashboard";
salesSheet["A3"].Value = "Region";
salesSheet["B3"].Value = "Q1 Sales";
salesSheet["C3"].Value = "Q2 Sales";
string[] regions = { "North", "South", "East", "West" };
decimal[] q1Sales = { 250000, 180000, 220000, 195000 };
decimal[] q2Sales = { 275000, 195000, 240000, 210000 };
for (int i = 0; i < regions.Length; i++)
{
    salesSheet[$"A{i + 4}"].Value = regions[i];
    salesSheet[$"B{i + 4}"].Value = q1Sales[i];
    salesSheet[$"C{i + 4}"].Value = q2Sales[i];
}
// Populate Inventory sheet
inventorySheet["A1"].Value = "Inventory Status";
inventorySheet["A3"].Value = "Product";
inventorySheet["B3"].Value = "Stock Level";
inventorySheet["C3"].Value = "Reorder Point";
inventorySheet["D3"].Value = "Status";
// Add inventory data with conditional status
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] stock = { 150, 45, 200 };
int[] reorderPoint = { 100, 50, 75 };
for (int i = 0; i < products.Length; i++)
{
    inventorySheet[$"A{i + 4}"].Value = products[i];
    inventorySheet[$"B{i + 4}"].Value = stock[i];
    inventorySheet[$"C{i + 4}"].Value = reorderPoint[i];
    // Status based on stock level
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    // Color code status
    if (status == "REORDER")
    {
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
    }
}
// Create summary sheet referencing other sheets
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");
summarySheet["A1"].Value = "Company Overview";
summarySheet["A3"].Value = "Metric";
summarySheet["B3"].Value = "Value";
summarySheet["A4"].Value = "Total Q1 Sales";
summarySheet["B4"].Formula = "=SUM(Sales!B4:B7)";
summarySheet["A5"].Value = "Total Q2 Sales";
summarySheet["B5"].Formula = "=SUM(Sales!C4:C7)";
summarySheet["A6"].Value = "Products Need Reorder";
summarySheet["B6"].Formula = "=COUNTIF(Inventory!D4:D6,\"REORDER\")";
// Format all sheets consistently
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    // Format headers
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
    var headerRow = sheet["A3:D3"];
    headerRow.Style.Font.Bold = true;
    headerRow.Style.SetBackgroundColor("#E7E6E6");
}
// Save multi-sheet workbook
companyReport.SaveAs("CompanyReport.xlsx");
$vbLabelText   $csharpLabel

Este exemplo cria um relatório completo de múltiplas planilhas. Cada planilha serve a um propósito específico: dados de vendas, rastreamento de inventário e métricas de RH. A planilha de resumo consolida métricas-chave usando fórmulas entre planilhas. Observe a sintaxe de referência de planilha nas fórmulas "Vendas!B4:B7" refere-se às células B4 até B7 na planilha Vendas.

A planilha de inventário demonstra lógica condicional, colorindo itens com baixo estoque de vermelho para atenção imediata. O loop foreach aplica formatação consistente em todas as planilhas, mantendo uma aparência profissional em todo o livro. Os nomes das planilhas aparecem como abas no Excel, permitindo que os usuários naveguem facilmente entre diferentes visualizações de dados.

Quais São as Melhores Práticas para Geração de Excel?

A geração eficiente de arquivos Excel em C# requer abordagens cuidadosas para uso de memória, tratamento de erros e implantação. Essas práticas garantem que suas aplicações escalem efetivamente enquanto mantêm a confiabilidade ao criar planilhas do Excel programaticamente.

O gerenciamento da memória torna-se crítico com arquivos grandes. Em vez de carregar conjuntos de dados inteiros em memória, processe os dados em blocos:

// Process large datasets efficiently
public void ExportLargeDataset(string filename)
{
    WorkBook workbook = WorkBook.Create();
    WorkSheet sheet = workbook.CreateWorkSheet("Data");
    int rowsPerBatch = 1000;
    int currentRow = 1;
    // Process in batches
    foreach (var batch in GetDataInBatches(rowsPerBatch))
    {
        foreach (var record in batch)
        {
            sheet[$"A{currentRow}"].Value = record.Id;
            sheet[$"B{currentRow}"].Value = record.Name;
            sheet[$"C{currentRow}"].Value = record.Value;
            currentRow++;
        }
    }
    workbook.SaveAs(filename);
}
// Process large datasets efficiently
public void ExportLargeDataset(string filename)
{
    WorkBook workbook = WorkBook.Create();
    WorkSheet sheet = workbook.CreateWorkSheet("Data");
    int rowsPerBatch = 1000;
    int currentRow = 1;
    // Process in batches
    foreach (var batch in GetDataInBatches(rowsPerBatch))
    {
        foreach (var record in batch)
        {
            sheet[$"A{currentRow}"].Value = record.Id;
            sheet[$"B{currentRow}"].Value = record.Name;
            sheet[$"C{currentRow}"].Value = record.Value;
            currentRow++;
        }
    }
    workbook.SaveAs(filename);
}
$vbLabelText   $csharpLabel

O tratamento de erros evita falhas no aplicativo e fornece feedback significativo ao gerar arquivos Excel:

try
{
    WorkBook workbook = WorkBook.Create();
    // Excel generation code
    workbook.SaveAs("output.xlsx");
}
catch (Exception ex)
{
    // Log the error
    Console.WriteLine($"Excel generation failed: {ex.Message}");
    // Implement appropriate recovery or notification
}
try
{
    WorkBook workbook = WorkBook.Create();
    // Excel generation code
    workbook.SaveAs("output.xlsx");
}
catch (Exception ex)
{
    // Log the error
    Console.WriteLine($"Excel generation failed: {ex.Message}");
    // Implement appropriate recovery or notification
}
$vbLabelText   $csharpLabel

Para aplicações web, gere arquivos Excel na memória e transmita para os usuários:

// ASP.NET Core example
public IActionResult DownloadExcel()
{
    WorkBook workbook = GenerateReport();
    var stream = new MemoryStream();
    workbook.SaveAs(stream);
    stream.Position = 0;
    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx");
}
// ASP.NET Core example
public IActionResult DownloadExcel()
{
    WorkBook workbook = GenerateReport();
    var stream = new MemoryStream();
    workbook.SaveAs(stream);
    stream.Position = 0;
    return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "report.xlsx");
}
$vbLabelText   $csharpLabel

As considerações de implantação garantem operações de produção suaves. O IronXL funciona em ambientes restritos sem permissões elevadas, tornando-o adequado para hospedagem compartilhada e implantações em contêiner. Inclua o arquivo de licença do IronXL no seu pacote de implantação e assegure-se de que o seu aplicativo tenha permissões de gravação para operações de arquivos temporários, se necessário. Para orientações adicionais de implantação, consulte a documentação de implantação.

Conclusão

O IronXL transforma a geração de arquivos Excel em C# de um desafio complexo em codificação simples. Você aprendeu a criar pastas de trabalho, preencher células, aplicar formatação, usar fórmulas e exportar dados de banco de dados - tudo sem dependências do Microsoft Office. Essas técnicas para gerar arquivos Excel programaticamente funcionam de maneira consistente em plataformas Windows, Linux e na nuvem.

Pronto para implementar a geração de Excel em suas aplicações C#? Inicie sua avaliação gratuita ou explore a documentação abrangente da API para recursos avançados. Para implantações em produção, veja as opções de licenciamento que correspondem às suas necessidades de projeto.

Como Gerar Arquivo Excel em C# Usando IronXL: Imagem 11 - Licenciamento

Perguntas frequentes

O que é IronXL?

IronXL é uma biblioteca poderosa para criar, ler e editar arquivos Excel em aplicativos .NET sem a necessidade do Microsoft Office ou da complexa interoperabilidade COM.

Como posso criar arquivos Excel em C# usando o IronXL?

Com o IronXL, você pode gerar arquivos Excel programaticamente em C# utilizando sua API intuitiva. Isso inclui a criação de planilhas, a aplicação de formatação e a integração com bancos de dados.

Preciso ter o Microsoft Office instalado para usar o IronXL?

Não, o IronXL não requer o Microsoft Office. Ele permite criar e manipular arquivos do Excel sem depender do Office.

O IronXL é compatível com os formatos de arquivo XLS e XLSX?

Sim, o IronXL suporta os formatos de arquivo XLS e XLSX, permitindo que você trabalhe com uma ampla variedade de arquivos do Excel sem problemas.

O IronXL é adequado para criar relatórios e exportar dados?

Sem dúvida, o IronXL é ideal para gerar relatórios e exportar dados para arquivos do Excel, graças aos seus recursos robustos e à sua capacidade de integração perfeita.

Que tipo de opções de formatação o IronXL oferece?

O IronXL oferece opções avançadas de formatação, incluindo estilos de célula, formatação condicional e muito mais, permitindo que você crie documentos do Excel visualmente atraentes e bem organizados.

Posso automatizar a geração de planilhas com o IronXL?

Sim, o IronXL permite a automatização dos processos de geração de planilhas, facilitando o gerenciamento eficiente de grandes conjuntos de dados e tarefas repetitivas.

O IronXL é compatível com Visual Basic, assim como com C#?

Sim, o IronXL pode ser usado tanto com C# quanto com Visual Basic, proporcionando flexibilidade para desenvolvedores que trabalham com diferentes linguagens de programação em .NET.

Como o IronXL se integra com bancos de dados?

O IronXL permite fácil integração com bancos de dados, possibilitando a importação e exportação de dados entre arquivos do Excel e sistemas de banco de dados com o mínimo esforço.

Onde posso encontrar um tutorial sobre como usar o IronXL em aplicações .NET?

Você pode encontrar um tutorial completo sobre como usar o IronXL para aplicações .NET no site da Iron Software, que o guiará desde a criação e manipulação de arquivos Excel, do básico ao avançado.

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