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

Como gerar arquivos Excel em C# usando o IronXL

Gerar arquivos de planilha Excel programaticamente em C# tradicionalmente exigia a instalação do Microsoft Office ou complexas operações COM Interop. IronXL muda isso completamente, oferecendo uma API simples que cria arquivos 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. Quer você esteja criando relatórios, exportando dados (arquivos XLS ou XLSX) ou automatizando a geração de planilhas, aprenderá as técnicas essenciais para trabalhar com Excel em aplicações .NET.

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

Por que gerar arquivos 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 ao operar 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 visando aplicações .NET Framework, .NET Core ou .NET 10.

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

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 na 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, sem registro de COM e sem pacotes de serviço do Office para manter. Seus pipelines de integração contínua funcionam sem atrito e os contêineres 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 Open XML da Microsoft para trabalhar diretamente com estruturas de arquivo Office Open XML. No entanto, essa abordagem requer mais esforço manual e um conhecimento detalhado do esquema XML e da instalação do SDK Open XML. 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 - Recursos

Como você instala o IronXL em um projeto C#?

Instalar o IronXL leva apenas alguns momentos através do Gerenciador de Pacotes NuGet no Visual Studio. Clique com o botão direito no seu projeto no Solution Explorer 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#.

Para instalar via o Console do Gerenciador de Pacotes ou o .NET CLI, use qualquer um dos seguintes comandos:

Install-Package IronXl.Excel
dotnet add package IronXl.Excel
Install-Package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

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

Verifique a instalação com este teste simples para confirmar que a biblioteca está pronta:

using IronXL;
// Create an in-memory workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
using IronXL;
// Create an in-memory workbook
var workbook = WorkBook.Create();
Console.WriteLine("IronXL installed successfully!");
$vbLabelText   $csharpLabel

Se isso for executado 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ção detalhada sobre instalação e resolução de problemas, consulte a documentação oficial de instalação do NuGet.

Saída

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

Como Você Cria Seu Primeiro Arquivo Excel?

Criar arquivos Excel com IronXL começa com a classe WorkBook, sua porta de entrada para todas as operações Excel. A biblioteca suporta tanto formatos modernos XLSX quanto os legados XLS, oferecendo flexibilidade para diferentes requisitos quando você cria um arquivo 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 header row
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 header row
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, seguindo os padrões de propriedades 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 guia de como escrever arquivo Excel.

Saída

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

Como Você Escreve 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. Compreender esses métodos ajuda você a escolher a abordagem mais eficiente para seu cenário de dados quando você escreve em um arquivo Excel.

using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
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 at once
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based row, 0-based column)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based header 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("EmployeeData.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
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 at once
worksheet["B1:B3"].Value = "Active";
// Using numeric indices (0-based row, 0-based column)
worksheet.SetCellValue(0, 2, "Department"); // C1
worksheet.SetCellValue(1, 2, "Sales");       // C2
worksheet.SetCellValue(2, 2, "Marketing");   // C3
// Array-based header 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("EmployeeData.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 intervalo ("B1:B3") definem eficientemente várias células para o mesmo valor, ideal para inicializar colunas ou aplicar valores padrão.

O IronXL lida inteligentemente com diferentes tipos de dados. Decimais mantêm a precisão para dados financeiros, objetos DateTime são formatados corretamente como datas do Excel e booleanos aparecem como TRUE/FALSE. Essa conversão automática elimina código de formatação manual enquanto garante a integridade dos dados. Para grandes conjuntos de dados, explore o guia de importação de dados para padrões adicionais.

Saída

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

Como Você Aplica Formatação Profissional a Arquivos Excel?

Arquivos Excel profissionais exigem mais do que dados brutos. A API de estilo do IronXL transforma planilhas simples em documentos empresariais polidos através de formatação, cores e hierarquia visual. Você pode aplicar formatação de célula para controlar todos os aspectos visuais da sua planilha.

using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
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 width
// 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;
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability (banded rows)
for (int row = 2; row <= 10; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
workbook.SaveAs("FormattedReport.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
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 width
// 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;
dataRange.Style.TopBorder.Color = "#000000";
dataRange.Style.BottomBorder.Color = "#000000";
// Text alignment
worksheet["A1:G1"].Style.HorizontalAlignment = IronXl.Styles.HorizontalAlignment.Center;
// Alternating row colors for readability (banded rows)
for (int row = 2; row <= 10; row++)
{
    if (row % 2 == 0)
    {
        worksheet[$"A{row}:G{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
workbook.SaveAs("FormattedReport.xlsx");
$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 hex, oferecendo controle preciso sobre seu esquema de cores. Propriedades de fonte incluem opções de tamanho, cor, negrito, itálico e sublinhado — todas essenciais para criar arquivos Excel que correspondam às diretrizes de branding corporativo.

Ajustes na largura das colunas evitam o truncamento de texto. AutoSizeColumn() encaixa automaticamente o conteúdo, enquanto GetColumn().Width fornece controle exato. A formatação de números usa 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 semelhantes, usando strings de formato de data padrão do Excel, conforme documentado na referência de códigos de formato numérico da Microsoft.

Bordas definem limites de dados, melhorando a legibilidade. O enum BorderType oferece vários estilos: fino, médio, grosso, pontilhado e tracejado. Cores de linhas alternadas, muitas vezes chamadas de "linhas bandas", ajudam os leitores a acompanhar informações em conjuntos de dados amplos. Para saber mais sobre a mesclagem de células e outros recursos de layout, consulte o guia de mesclagem de células.

Saída

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

Como Você Usa 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.

using IronXL;
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 and add row total formulas
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];
    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";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas before saving
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
using IronXL;
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 and add row total formulas
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];
    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";
// Average calculation
budget["A10"].Value = "Average Spending";
budget["B10"].Formula = "=AVERAGE(B2:B6)";
// Evaluate all formulas before saving
workbook.EvaluateAll();
workbook.SaveAs("Budget.xlsx");
$vbLabelText   $csharpLabel

Este exemplo de orçamento ilustra a aplicação prática de fórmulas. A propriedade Formula aceita a sintaxe de fórmula padrão 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.

O método EvaluateAll() processa todas as fórmulas, atualizando os valores calculados em toda a pasta de trabalho. Isso garante que as fórmulas exibam resultados quando o arquivo é aberto no Excel. Sem avaliação, o Excel exibiria o texto da fórmula até que o usuário acionasse o recálculo. Para mais informações sobre a leitura de resultados de fórmulas, consulte a documentação de leitura de arquivos Excel.

Saída

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

Como Você Exporta Dados de Banco 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 torna esse processo simples com suporte embutido para DataTable, eliminando a necessidade de mapeamento manual de campos ao exportar Excel de aplicativos em C#.

using System.Data;
using IronXL;

// Simulate database retrieval (replace with 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));
    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");
DataTable salesData = GetSalesData();

// Title row
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);
}
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]);
    }
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}

// Total header
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency and date 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";
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";

// 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";

for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); }
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
using System.Data;
using IronXL;

// Simulate database retrieval (replace with 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));
    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");
DataTable salesData = GetSalesData();

// Title row
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);
}
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]);
    }
    reportSheet[$"G{row + headerRow + 1}"].Formula = $"=D{row + headerRow + 1}*E{row + headerRow + 1}";
}

// Total header
reportSheet["G3"].Value = "Total";
reportSheet["G3"].Style.Font.Bold = true;
reportSheet["G3"].Style.SetBackgroundColor("#D9E1F2");
// Format currency and date 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";
reportSheet[$"F{headerRow + 1}:F{headerRow + salesData.Rows.Count}"].FormatString = "MM/dd/yyyy";

// 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";

for (int col = 0; col <= 6; col++) { reportSheet.AutoSizeColumn(col); }
reportWorkbook.EvaluateAll();
reportWorkbook.SaveAs("DatabaseExport.xlsx");
$vbLabelText   $csharpLabel

Este exemplo demonstra um fluxo de trabalho completo de banco de dados para Excel. O DataTable simula a recuperação de banco de dados -- em produção, substitua isso por consultas reais ao banco de dados 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 usa fórmulas do Excel para contar pedidos e somar receitas, garantindo que esses valores sejam atualizados se os dados mudarem. Para trabalhar com DataSets e estruturas de dados maiores, consulte o guia de conversão de Excel para DataSet.

Saída

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

Precisa colocar relatórios do Excel em produção? Adquira uma licença para desbloquear todo o potencial do IronXL para implantações de produção.

Como Você Lida com 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. Você pode abrir e gerenciar as planilhas de um livro com apenas algumas linhas de código.

using IronXL;
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");

// 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";
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];
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    if (status == "REORDER")
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
}

// Summary sheet with cross-sheet formulas
summarySheet["A1"].Value = "Company Overview";
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\")";

// Apply consistent formatting across all sheets
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
}
companyReport.SaveAs("CompanyReport.xlsx");
using IronXL;
WorkBook companyReport = WorkBook.Create();
// Create department sheets
WorkSheet salesSheet = companyReport.CreateWorkSheet("Sales");
WorkSheet inventorySheet = companyReport.CreateWorkSheet("Inventory");
WorkSheet summarySheet = companyReport.CreateWorkSheet("Summary");

// 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";
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];
    string status = stock[i] <= reorderPoint[i] ? "REORDER" : "OK";
    inventorySheet[$"D{i + 4}"].Value = status;
    if (status == "REORDER")
        inventorySheet[$"D{i + 4}"].Style.Font.Color = "#FF0000";
}

// Summary sheet with cross-sheet formulas
summarySheet["A1"].Value = "Company Overview";
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\")";

// Apply consistent formatting across all sheets
foreach (WorkSheet sheet in companyReport.WorkSheets)
{
    sheet["A1"].Style.Font.Bold = true;
    sheet["A1"].Style.Font.Height = 14;
}
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 uma visão de resumo. A planilha de resumo consolida métricas-chave usando fórmulas entre planilhas. Observe a sintaxe de referência de planilha — "Vendas!B4:B7" refere-se às células B4 a 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 toda a pasta de trabalho. 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 Arquivos Excel em C#?

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. Processe dados em lotes em vez de carregar conjuntos de dados inteiros de uma vez. O padrão a seguir mantém o uso de memória previsível para exportações de alto volume:

using IronXL;
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Data");
int rowsPerBatch = 1000;
int currentRow = 2;
sheet["A1"].Value = "ID";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Value";
// Process records in manageable 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("LargeDataset.xlsx");
using IronXL;
WorkBook workbook = WorkBook.Create();
WorkSheet sheet = workbook.CreateWorkSheet("Data");
int rowsPerBatch = 1000;
int currentRow = 2;
sheet["A1"].Value = "ID";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Value";
// Process records in manageable 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("LargeDataset.xlsx");
$vbLabelText   $csharpLabel

Para aplicativos web, gere arquivos Excel em memória e transmita diretamente para os usuários em vez de escrever arquivos temporários no disco. Sempre envolva a lógica de geração em manipulação de erros para evitar falhas e fornecer feedback significativo:

// ASP.NET Core controller action with error handling
IActionResult DownloadExcel()
{
    try
    {
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Report");
        sheet["A1"].Value = "Report Data";
        // Populate report data here...
        var stream = new MemoryStream();
        workbook.SaveAs(stream);
        stream.Position = 0;
        return File(stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "report.xlsx");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Excel generation failed: {ex.Message}");
        return StatusCode(500, "Failed to generate Excel file.");
    }
}
// ASP.NET Core controller action with error handling
IActionResult DownloadExcel()
{
    try
    {
        WorkBook workbook = WorkBook.Create();
        WorkSheet sheet = workbook.CreateWorkSheet("Report");
        sheet["A1"].Value = "Report Data";
        // Populate report data here...
        var stream = new MemoryStream();
        workbook.SaveAs(stream);
        stream.Position = 0;
        return File(stream,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "report.xlsx");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Excel generation failed: {ex.Message}");
        return StatusCode(500, "Failed to generate Excel file.");
    }
}
$vbLabelText   $csharpLabel

A tabela abaixo resume as principais melhores práticas e quando aplicá-las:

Melhores Práticas do IronXL para Geração de Excel em C#
Cenário Abordagem recomendada Benefício
Large datasets (>10,000 rows) Processamento em lotes com gravações segmentadas Redução do uso de memória
Downloads de aplicativos web MemoryStream em vez de arquivos temporários Sem IO de disco, resposta mais rápida
Implantação em produção Incluir chave de licença válida do IronXL Sem marca d'água em arquivos gerados
Moeda e datas Use a propriedade FormatString Exibição correta de localidade no Excel
Relatórios dinâmicos Chame EvaluateAll() antes de SaveAs() Fórmulas mostram valores calculados

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 verifique se seu aplicativo possui permissões de gravação para quaisquer operações de arquivo temporárias necessárias. Para orientações adicionais de implantação, consulte a visão geral das funcionalidades do IronXL e a documentação completa da API.

Para Onde Você Pode Ir a Partir Daqui?

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ções, usar fórmulas, exportar dados de banco de dados e gerenciar múltiplas planilhas -- tudo sem dependências do Microsoft Office. Essas técnicas funcionam de forma consistente em plataformas Windows, Linux e em nuvem, visando o .NET 10.

Para se aprofundar, explore os guias práticos do IronXL para ler e modificar arquivos Excel existentes ou a página de licença de teste para começar em produção. Veja as opções de licenciamento que correspondem aos requisitos e à escala do seu projeto.

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

Perguntas frequentes

Como posso gerar arquivos do Excel usando C#?

Você pode gerar arquivos Excel em C# usando o IronXL, que fornece uma API simples para criar arquivos Excel sem exigir a instalação do Microsoft Office ou interoperabilidade COM complexa.

É necessário o Microsoft Office para trabalhar com arquivos do Excel em C#?

Não, o Microsoft Office não é necessário. O IronXL permite criar e manipular arquivos do Excel em C# sem qualquer dependência do Office.

Quais são as vantagens de usar o IronXL em comparação com os métodos tradicionais?

O IronXL simplifica o processo de geração de arquivos Excel, eliminando a necessidade do Microsoft Office e da complexa interoperabilidade COM, oferecendo uma API direta para criação e manipulação de arquivos Excel.

Posso integrar bancos de dados com arquivos do Excel usando o IronXL?

Sim, o IronXL suporta operações avançadas, como integração com banco de dados, permitindo exportar dados para arquivos do Excel de forma eficiente.

Quais formatos de arquivo podem ser gerados com o IronXL?

O IronXL permite criar arquivos nos formatos XLS e XLSX, tornando-o versátil para diferentes necessidades de geração de arquivos do Excel.

O IronXL suporta formatação avançada em arquivos do Excel?

Sim, o IronXL suporta recursos avançados de formatação, permitindo que você personalize a aparência e a estrutura de seus arquivos do Excel.

É possível automatizar a geração de planilhas usando o IronXL?

Sim, o IronXL fornece ferramentas e técnicas para automatizar a geração de planilhas, simplificando processos como a criação de relatórios e a exportação de dados.

Como posso criar relatórios usando o Excel em aplicações .NET?

O IronXL oferece uma maneira fácil de criar relatórios, gerando arquivos Excel diretamente em aplicativos .NET, proporcionando uma solução poderosa para apresentação de dados.

Quais técnicas são essenciais para trabalhar com o Excel em C#?

As técnicas essenciais para trabalhar com o Excel em C# usando o IronXL incluem a criação básica de planilhas, formatação avançada e integração com banco de dados.

Onde posso encontrar documentação sobre como usar o IronXL em C#?

Você pode encontrar documentação completa sobre como usar o IronXL em C# no site da Iron Software, que inclui tutoriais e exemplos para diversos casos de uso.

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