Como criar um arquivo Excel em C#

How to Create an Excel File in C# (.NET Tutorial)

This article was translated from English: Does it need improvement?
Translated
View the article in English

A maioria das equipes com as quais trabalho precisa gerar arquivos Excel pelo menos tão frequentemente quanto os lê: faturas, exportações, relatórios mensais que a equipe financeira pode abrir e filtrar. Eu construí este fluxo dezenas de vezes em aplicativos de console, serviços ASP.NET e workers em segundo plano. A API do IronXL é próxima o suficiente da forma como o próprio Excel pensa que o código é lido quase como uma especificação, mas há algumas decisões de formatação e salvamento que importam mais do que a superfície da API deixa transparecer. Este guia é como eu realmente gero arquivos XLSX em produção, incluindo as armadilhas que me custaram tempo nas primeiras vezes.

A biblioteca funciona em .NET 8, .NET 9, .NET Core e .NET Framework, em Windows, Linux, macOS, Azure e AWS, sem o Microsoft Office no host. Os caminhos de código abaixo são os mesmos em todos esses alvos.

Início Rápido: Criar um Arquivo do Excel

Três linhas levantam um novo livro, escrevem um valor em A1 e salvam o arquivo em disco. Nenhum processo do Excel envolvido, nenhum marshaling COM.

  1. Instale IronXL com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronXL.Excel
  2. Copie e execute este trecho de código.

    WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronXL em seu projeto hoje com uma avaliação gratuita

    arrow pointer

O que é o IronXL e por que usá-lo para criar arquivos do Excel?

IronXL é uma API Excel para C# e VB.NET para ler, editar e criar arquivos de planilha. Não requer Microsoft Office ou Excel Interop, o que mantém a implantação para uma referência NuGet e uma diretiva using.

O IronXL oferece suporte completo aos ambientes .NET 9, .NET 8, .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS e Azure.

Características do IronXL

Suporte humano direto da nossa equipe de desenvolvimento .NET

  • Instalação rápida com o Microsoft Visual Studio
  • GRATUITO para desenvolvimento. Licenças de $999

Como posso criar e salvar um arquivo do Excel rapidamente?

Instale o IronXL via NuGet ou baixe a DLL diretamente . A classe WorkBook é o ponto de entrada para todas as operações do Excel, e a classe WorkSheet expõe métodos para manipulação de planilhas individuais. O detalhamento passo a passo completo começa no Passo 1 abaixo.


How Do I Install the IronXL C# Library?

Instale o IronXL através do Gerenciador de Pacotes NuGet no Visual Studio ou utilize o Console do Gerenciador de Pacotes:

Install-Package IronXL.Excel

Acesse o Gerenciador de Pacotes NuGet através do menu Projeto ou clicando com o botão direito do mouse no seu projeto no Explorador de Soluções.

Menu do Projeto do Visual Studio mostrando a opção Gerenciar Pacotes NuGet Figura 3 - Acessar Gerenciador de Pacotes NuGet através do menu Projeto

Menu de contexto do Solution Explorer exibindo a opção Gerenciar Pacotes NuGet Figura 4 - Menu de contexto de clique direito no Solution Explorer

Procure por IronXL.Excel na lista de pacotes e clique em Instalar.


Gerenciador de Pacotes NuGet mostrando o pacote IronXL.Excel pronto para instalação Figura 5 - Instalando IronXL.Excel através do Gerenciador de Pacotes NuGet

Alternativamente, baixe o DLL IronXL diretamente e adicione como referência ao seu projeto via Solution Explorer > Referências > Procurar por IronXL.dll.

Página de download do site do IronXL mostrando instruções de instalação e botão de download Figura 6 - Baixar a biblioteca IronXL do site oficial

ObserveO IronXL não requer instalação do Microsoft Office ou Excel Interop. Funciona em qualquer plataforma suportada pelo .NET, incluindo Windows, Linux, macOS e ambientes de nuvem.)}


Como configuro meu projeto .NET?

O IronXL funciona com qualquer tipo de projeto .NET: aplicativos de console, aplicativos web ASP.NET, APIs ou ferramentas de desktop. O exemplo abaixo usa uma Aplicação Web ASP.NET, mas os mesmos caminhos de código funcionam em todos os modelos de projeto.

Siga estes passos para criar um site ASP.NET:

  1. Abra o Visual Studio
  2. Clique em Arquivo > Novo Projeto
  3. Selecione Web em Visual C# na lista Tipo de projeto.
  4. Selecione Aplicativo Web ASP.NET


    Caixa de diálogo Novo Projeto do Visual Studio com a opção Aplicativo Web ASP.NET selecionada

    Figura 1Create new ASP.NET project

  5. Clique em OK
  6. Selecione o modelo de Formulários Web

    Seleção de modelo de projeto ASP.NET mostrando a opção Web Forms

    Figura 2Select Web Forms template

  7. Clique em OK

Com seu projeto pronto, instale o IronXL para começar a criar arquivos do Excel programaticamente.


How Do I Create an Excel Workbook in C#?

Um novo workbook é uma chamada única para WorkBook.Create, com o formato do arquivo passado como um enum:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-3.cs
WorkSheet workSheet = workBook.CreateWorkSheet("2020 Budget");
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("2020 Budget")
$vbLabelText   $csharpLabel

O método Create suporta formatos XLS (Excel 97-2003) e XLSX (Excel 2007+). O formato XLSX é recomendado para melhor desempenho e arquivos menores.

  • XLSX : Recomendado para todas as versões modernas do Excel (2007+) — arquivos menores, melhor desempenho.
  • XLS : Formato legado para compatibilidade com o Excel 97–2003

Como adiciono uma planilha à minha pasta de trabalho?

Adicione planilhas através de CreateWorkSheet:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-4.cs
workSheet["A1"].Value = "January";
workSheet["B1"].Value = "February";
workSheet["C1"].Value = "March";
workSheet["D1"].Value = "April";
workSheet["E1"].Value = "May";
workSheet["F1"].Value = "June";
workSheet["G1"].Value = "July";
workSheet["H1"].Value = "August";
workSheet["I1"].Value = "September";
workSheet["J1"].Value = "October";
workSheet["K1"].Value = "November";
workSheet["L1"].Value = "December";
workSheet("A1").Value = "January"
workSheet("B1").Value = "February"
workSheet("C1").Value = "March"
workSheet("D1").Value = "April"
workSheet("E1").Value = "May"
workSheet("F1").Value = "June"
workSheet("G1").Value = "July"
workSheet("H1").Value = "August"
workSheet("I1").Value = "September"
workSheet("J1").Value = "October"
workSheet("K1").Value = "November"
workSheet("L1").Value = "December"
$vbLabelText   $csharpLabel

Um caderno de exercícios contém uma ou mais folhas de exercícios. Cada planilha consiste em linhas e colunas, com células em suas interseções. Use o método CreateWorkSheet para adicionar novas planilhas ao seu workbook.

  • WorkBook.CreateWorkSheet(String): Adiciona uma nova planilha com o nome da aba especificado
  • WorkSheet: Recupera uma planilha existente pelo nome
  • Os nomes das planilhas devem ser únicos dentro de uma pasta de trabalho.

Como faço para definir valores de células no Excel?

Como posso definir os valores das células manualmente?

O acesso às células usa as mesmas strings de endereço no estilo A1 que você vê no Excel:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-5.cs
Random r = new Random();
for (int i = 2 ; i <= 11 ; i++)
{
    workSheet["A" + i].Value = r.Next(1, 1000);
    workSheet["B" + i].Value = r.Next(1000, 2000);
    workSheet["C" + i].Value = r.Next(2000, 3000);
    workSheet["D" + i].Value = r.Next(3000, 4000);
    workSheet["E" + i].Value = r.Next(4000, 5000);
    workSheet["F" + i].Value = r.Next(5000, 6000);
    workSheet["G" + i].Value = r.Next(6000, 7000);
    workSheet["H" + i].Value = r.Next(7000, 8000);
    workSheet["I" + i].Value = r.Next(8000, 9000);
    workSheet["J" + i].Value = r.Next(9000, 10000);
    workSheet["K" + i].Value = r.Next(10000, 11000);
    workSheet["L" + i].Value = r.Next(11000, 12000);
}
Dim r As New Random()
For i As Integer = 2 To 11
	workSheet("A" & i).Value = r.Next(1, 1000)
	workSheet("B" & i).Value = r.Next(1000, 2000)
	workSheet("C" & i).Value = r.Next(2000, 3000)
	workSheet("D" & i).Value = r.Next(3000, 4000)
	workSheet("E" & i).Value = r.Next(4000, 5000)
	workSheet("F" & i).Value = r.Next(5000, 6000)
	workSheet("G" & i).Value = r.Next(6000, 7000)
	workSheet("H" & i).Value = r.Next(7000, 8000)
	workSheet("I" & i).Value = r.Next(8000, 9000)
	workSheet("J" & i).Value = r.Next(9000, 10000)
	workSheet("K" & i).Value = r.Next(10000, 11000)
	workSheet("L" & i).Value = r.Next(11000, 12000)
Next i
$vbLabelText   $csharpLabel

A propriedade Value aceita vários tipos de dados, incluindo strings, números, datas, e booleanos. O IronXL formata automaticamente as células com base no tipo de dados.

Como faço para definir valores de células dinamicamente?

Quando a contagem de linhas é conhecida em tempo de execução, a interpolação de strings torna o corpo do loop fácil de ler:

// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
// Initialize random number generator for sample data
Random r = new Random();

// Populate cells with random budget data for each month
for (int i = 2; i <= 11; i++)
{
    // Set different budget categories with increasing ranges
    workSheet[$"A{i}"].Value = r.Next(1, 1000);     // Office Supplies
    workSheet[$"B{i}"].Value = r.Next(1000, 2000);  // Utilities
    workSheet[$"C{i}"].Value = r.Next(2000, 3000);  // Rent
    workSheet[$"D{i}"].Value = r.Next(3000, 4000);  // Salaries
    workSheet[$"E{i}"].Value = r.Next(4000, 5000);  // Marketing
    workSheet[$"F{i}"].Value = r.Next(5000, 6000);  // IT Services
    workSheet[$"G{i}"].Value = r.Next(6000, 7000);  // Travel
    workSheet[$"H{i}"].Value = r.Next(7000, 8000);  // Training
    workSheet[$"I{i}"].Value = r.Next(8000, 9000);  // Insurance
    workSheet[$"J{i}"].Value = r.Next(9000, 10000); // Equipment
    workSheet[$"K{i}"].Value = r.Next(10000, 11000); // Research
    workSheet[$"L{i}"].Value = r.Next(11000, 12000); // Misc
}

// Alternative: Set range of cells with same value
workSheet["A13:L13"].Value = 0; // Initialize totals row
' Initialize random number generator for sample data
Dim r As New Random()

' Populate cells with random budget data for each month
For i As Integer = 2 To 11
	' Set different budget categories with increasing ranges
	workSheet($"A{i}").Value = r.Next(1, 1000) ' Office Supplies
	workSheet($"B{i}").Value = r.Next(1000, 2000) ' Utilities
	workSheet($"C{i}").Value = r.Next(2000, 3000) ' Rent
	workSheet($"D{i}").Value = r.Next(3000, 4000) ' Salaries
	workSheet($"E{i}").Value = r.Next(4000, 5000) ' Marketing
	workSheet($"F{i}").Value = r.Next(5000, 6000) ' IT Services
	workSheet($"G{i}").Value = r.Next(6000, 7000) ' Travel
	workSheet($"H{i}").Value = r.Next(7000, 8000) ' Training
	workSheet($"I{i}").Value = r.Next(8000, 9000) ' Insurance
	workSheet($"J{i}").Value = r.Next(9000, 10000) ' Equipment
	workSheet($"K{i}").Value = r.Next(10000, 11000) ' Research
	workSheet($"L{i}").Value = r.Next(11000, 12000) ' Misc
Next i

' Alternative: Set range of cells with same value
workSheet("A13:L13").Value = 0 ' Initialize totals row
$vbLabelText   $csharpLabel

A interpolação de strings ($"...") facilita o referenciamento dinâmico de células. O indexador Item suporta células individuais e intervalos.

Como faço para preencher uma planilha do Excel a partir de um banco de dados?

Carregar dados de bancos de dados para o Excel é um requisito comum:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-7.cs
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")
$vbLabelText   $csharpLabel

Este exemplo demonstra como ler dados do Excel a partir de bancos de dados, aplicar formatação e usar fórmulas para cálculos. A propriedade NumberFormat permite formatação de números personalizados, assim como no Excel.


Como aplicar formatação às células do Excel?

Como posso definir cores de fundo no Excel?

Fundos, cores de linha alternada e sobreposição de cores de fonte passam todos pelo objeto Style em uma célula ou intervalo:

// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
// Set header row background to light gray using hex color
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");

// Apply different colors for data categorization
workSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for January
workSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February

// Highlight important cells with bold colors
workSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totals
workSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text

// Create alternating row colors for better readability
for (int row = 2; row <= 11; row++)
{
    if (row % 2 == 0)
    {
        workSheet[$"A{row}:L{row}"].Style.SetBackgroundColor("#F2F2F2");
    }
}
' Set header row background to light gray using hex color
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")

' Apply different colors for data categorization
workSheet("A2:A11").Style.SetBackgroundColor("#E7F3FF") ' Light blue for January
workSheet("B2:B11").Style.SetBackgroundColor("#FFF2CC") ' Light yellow for February

' Highlight important cells with bold colors
workSheet("L12").Style.SetBackgroundColor("#FF0000") ' Red for totals
workSheet("L12").Style.Font.FontColor = "#FFFFFF" ' White text

' Create alternating row colors for better readability
For row As Integer = 2 To 11
	If row Mod 2 = 0 Then
		workSheet($"A{row}:L{row}").Style.SetBackgroundColor("#F2F2F2")
	End If
Next row
$vbLabelText   $csharpLabel

O método SetBackgroundColor aceita códigos de cores hexadecimais. Combine cores de fundo com Font.FontColor para manter o contraste legível em preenchimentos mais escuros.

Como criar bordas no Excel?

As fronteiras ajudam a definir regiões de dados e a melhorar a estrutura:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-9.cs
// Use IronXL built-in aggregations
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign value to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
' Use IronXL built-in aggregations
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign value to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
$vbLabelText   $csharpLabel

O IronXL suporta vários tipos de borda, incluindo fina, média, grossa, dupla, pontilhada e tracejada. Cada lado da borda pode ser estilizado independentemente.


How Do I Use Excel Formulas in C#?

O IronXL avalia fórmulas do Excel no momento da gravação, então os valores são corretos assim que o livro é salvo:

// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workBook.EvaluateAll();
// Use built-in aggregation functions for ranges
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign calculated values to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;

// Or use Excel formulas directly
workSheet["A12"].Formula = "=SUM(A2:A11)";
workSheet["B12"].Formula = "=AVERAGE(B2:B11)";
workSheet["C12"].Formula = "=MAX(C2:C11)";
workSheet["D12"].Formula = "=MIN(D2:D11)";

// Complex formulas with multiple functions
workSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";
workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";

// Percentage calculations
workSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";
workSheet["G12"].FormatString = "0.00%";

// Ensure all formulas calculate
workBook.EvaluateAll();
' Use built-in aggregation functions for ranges
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign calculated values to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min

' Or use Excel formulas directly
workSheet("A12").Formula = "=SUM(A2:A11)"
workSheet("B12").Formula = "=AVERAGE(B2:B11)"
workSheet("C12").Formula = "=MAX(C2:C11)"
workSheet("D12").Formula = "=MIN(D2:D11)"

' Complex formulas with multiple functions
workSheet("E12").Formula = "=IF(SUM(E2:E11)>50000,""Over Budget"",""On Track"")"
workSheet("F12").Formula = "=SUMIF(F2:F11,"">5000"")"

' Percentage calculations
workSheet("G12").Formula = "=G11/SUM(G2:G11)*100"
workSheet("G12").FormatString = "0.00%"

' Ensure all formulas calculate
workBook.EvaluateAll()
$vbLabelText   $csharpLabel

A classe Range fornece métodos como Sum, Average, Max e Min para cálculos rápidos. Para cenários mais complexos, use a propriedade Formula para definir fórmulas do Excel diretamente.

PontasPrefira os métodos integrados de .Sum(), .Avg(), .Max() e .Min() do IronXL em vez de strings de fórmulas brutas ao trabalhar com intervalos. Eles são seguros para tipos e evitam erros de sintaxe de fórmula em tempo de compilação.)}


Como configuro as propriedades da planilha e de impressão?

Utilize o IronXL para proteger planilhas individuais, congelar linhas e colunas e definir opções de formato de impressão.

Como posso configurar as propriedades da planilha?

Proteja as planilhas e controle as opções de visualização:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-11.cs
workSheet.SetPrintArea("A1:L12");
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape;
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4;
workSheet.SetPrintArea("A1:L12")
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4
$vbLabelText   $csharpLabel

A proteção da planilha impede modificações acidentais, enquanto o congelamento de painéis mantém linhas ou colunas importantes visíveis durante a rolagem.

Panes Congelados Figura 7 - A linha de cabeçalho congelada permanece visível enquanto rola

Diálogo de proteção do Excel exigindo senha para modificar planilha protegida Figura 8 - A proteção por senha impede edições não autorizadas

Como configuro as definições de página e impressão?

As opções de layout de impressão (orientação, tamanho do papel, margens, escala, cabeçalhos, rodapés) são todas expostas através de WorkSheet.PrintSetup:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-12.cs
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx")
$vbLabelText   $csharpLabel

A classe IPrintSetup fornece opções de configuração de impressão abrangentes correspondentes às configurações de impressão do Excel.

Pré-visualização de impressão do Excel mostrando orientação paisagem e configurações de tamanho de papel A4 Figura 9 - Visualização de impressão com orientação paisagem e margens personalizadas


Como faço para salvar minha planilha do Excel?

Salve sua planilha em vários formatos:

// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
// Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx");

// Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls");

// Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv");

// Save as JSON for web applications
workBook.SaveAsJson("Budget.json");

// Save to stream for web downloads or cloud storage
using (var stream = new MemoryStream())
{
    workBook.SaveAs(stream);
    byte[] excelData = stream.ToArray();
    // Send to client or save to cloud
}

// Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8);
' Save as XLSX (recommended for modern Excel)
workBook.SaveAs("Budget.xlsx")

' Save as XLS for legacy compatibility
workBook.SaveAs("Budget.xls")

' Save as CSV for data exchange
workBook.SaveAsCsv("Budget.csv")

' Save as JSON for web applications
workBook.SaveAsJson("Budget.json")

' Save to stream for web downloads or cloud storage
Using stream = New MemoryStream()
	workBook.SaveAs(stream)
	Dim excelData() As Byte = stream.ToArray()
	' Send to client or save to cloud
End Using

' Save with specific encoding for international characters
workBook.SaveAsCsv("Budget_UTF8.csv", System.Text.Encoding.UTF8)
$vbLabelText   $csharpLabel

O IronXL suporta vários formatos de exportação , incluindo XLSX, XLS, CSV, TSV e JSON. O método Save escolhe o formato a partir da extensão do arquivo.

  • XLSX / XLS : Formato Excel completo com formatação, fórmulas e várias planilhas
  • CSV: Texto simples para troca de dados, uma planilha por arquivo
  • JSON : Saída estruturada para APIs web e pipelines de dados
  • Stream: Saída em memória, útil para downloads na web ou armazenamento em nuvem

Quanto tempo leva realmente a geração?

Realizei um benchmark de geração em uma máquina com Windows 11 (.NET 9.0.7) para obter números concretos para um livro do tamanho que a maioria dos exportações em produção acabam. O harness constrói um XLSX de 10.000 linhas e três colunas na memória e o escreve no disco em uma única chamada SaveAs, tanto a frio quanto a quente. O projeto completo está na amostra CreateExcelBenchmark abaixo. Três lançamentos de processo separados chegaram aqui aproximadamente:

Operação Primeira execução a frio (processo novo) Média quente em 10 iterações
Construa um XLSX de 10.000 linhas e 3 colunas e SaveAs uma vez ~570–910 ms ~350 ms (intervalo de 240–450 ms)

O número a frio é dominado pelo carregamento de assembly do IronXL e pelo aquecimento do JIT. Uma vez que o processo está aquecido, a geração cai para a faixa de médio-300 ms com alguma variação de execução para execução devido à atividade de fundo. Para livros de trabalho substancialmente maiores (centenas de milhares de linhas, várias planilhas, estilo pesado), escrevo todo o livro de trabalho na memória e chamo SaveAs exatamente uma vez no final. A causa única mais comum de "por que minha exportação é tão lenta?" que vemos é chamar SaveAs repetidamente dentro de um loop enquanto o livro de trabalho está crescendo: cada salvamento serializa o estado atual inteiro, então o custo sobe a cada iteração.


Problemas Comuns

Algumas coisas mordem as pessoas com frequência suficiente para merecerem sua própria seção.

Esquecendo FormatString em datas e moedas

A armadilha de formatação que vejo mais: definir .Value para um DateTime, mas esquecer FormatString. A data é armazenada corretamente, mas o Excel a exibe como um número serial bruto (45292 significa 2024-01-01) até que você aplique uma string de formato como "yyyy-MM-dd". A moeda tem o mesmo problema: o número está correto, mas sem "$#,##0.00" ele é exibido como um decimal simples. Agora escrevo o valor e o formato em linhas adjacentes, para que os dois não se separem:

var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";

var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
var dateCell = sheet["A2"];
dateCell.Value = DateTime.Today;
dateCell.FormatString = "yyyy-MM-dd";

var moneyCell = sheet["B2"];
moneyCell.Value = 1499.95m;
moneyCell.FormatString = "$#,##0.00";
Dim dateCell = sheet("A2")
dateCell.Value = DateTime.Today
dateCell.FormatString = "yyyy-MM-dd"

Dim moneyCell = sheet("B2")
moneyCell.Value = 1499.95D
moneyCell.FormatString = "$#,##0.00"
$vbLabelText   $csharpLabel

O XLS irá truncar silenciosamente em 65.536 linhas

Isso é mencionado na seção de escolha de formato perto do topo do artigo, mas ganha seu lugar aqui porque o modo de falha é silencioso: ExcelFileFormat.XLS limita-se a 65.536 linhas por planilha, e as linhas além desse limite são descartadas sem exceção ou aviso. A exportação "sucede" e seus dados se vão. Escolha XLSX para qualquer coisa com muitos dados, a menos que um sistema downstream literalmente não possa lê-lo.

"O Excel diz que o arquivo está corrompido"

Se um arquivo gerado se recusar a abrir ou o Excel afirmar que está corrompido, a causa quase sempre é uma de duas coisas. Ou o fluxo de arquivo não foi descartado adequadamente, então os bytes no disco estão truncados; ou você escreveu para um caminho que ainda estava bloqueado por uma execução anterior, e apenas parte dos dados passou. Certifique-se de que SaveAs (ou o fluxo que o envolve) esteja totalmente concluído antes que qualquer outra coisa toque o arquivo, e prefira um bloco using ao redor de qualquer MemoryStream ou FileStream que você envolva um livro de trabalho.

Projeto de exemplo para os números do benchmark

Se você quiser reproduzir os números de tempo de antes, o suporte é um pequeno aplicativo de console .NET 9:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-15.cs
// CreateExcelBenchmark/Program.cs (excerpt)
IronXL.License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY");

var sw = Stopwatch.StartNew();
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var sheet = workbook.CreateWorkSheet("Data");
sheet["A1"].Value = "Id";
sheet["B1"].Value = "Name";
sheet["C1"].Value = "Amount";
for (int i = 0; i < 10_000; i++)
{
    int row = i + 2;
    sheet[$"A{row}"].Value = i + 1;
    sheet[$"B{row}"].Value = $"Item {i + 1}";
    sheet[$"C{row}"].Value = (i + 1) * 1.25m;
}
workbook.SaveAs("Generated.xlsx");
sw.Stop();
Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms");
Imports System
Imports System.Diagnostics
Imports IronXL

Module Program
    Sub Main()
        License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY")

        Dim sw As Stopwatch = Stopwatch.StartNew()
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim sheet As WorkSheet = workbook.CreateWorkSheet("Data")
        sheet("A1").Value = "Id"
        sheet("B1").Value = "Name"
        sheet("C1").Value = "Amount"
        For i As Integer = 0 To 9999
            Dim row As Integer = i + 2
            sheet($"A{row}").Value = i + 1
            sheet($"B{row}").Value = $"Item {i + 1}"
            sheet($"C{row}").Value = (i + 1) * 1.25D
        Next
        workbook.SaveAs("Generated.xlsx")
        sw.Stop()
        Console.WriteLine($"cold: {sw.Elapsed.TotalMilliseconds:F1} ms")
    End Sub
End Module
$vbLabelText   $csharpLabel

Execute-o sob dotnet run -c Release e substitua seus próprios números de linhas, números de colunas ou estilos para ver como os números variam com a complexidade do livro de trabalho.


Referência de objetos e recursos

A Referência da API do IronXL cobre todas as classes e métodos mencionados neste tutorial e também os que não são.

Tutoriais adicionais para operações Excel relacionadas:

Resumo

IronXL.Excel gera livros de trabalho do Excel em XLSX, XLS, CSV e JSON sem depender do Microsoft Office ou Interop. A receita que sigo em todos os projetos é a mesma: crie o livro de trabalho, adicione uma planilha, escreva valores e fórmulas, defina strings de formato onde a exibição importa, e salve uma vez no final.

Pronto para usar o IronXL em produção? Inicie seu teste gratuito ou veja as opções de licenciamento .

Perguntas frequentes

Como posso criar arquivos Excel em C# sem usar Interop?

Você pode criar arquivos Excel sem Interop usando o IronXL, que fornece uma API simples: WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX) . Essa abordagem funciona em qualquer plataforma .NET sem exigir a instalação do Microsoft Office.

Quais plataformas são suportadas pela criação de arquivos Excel com C#?

O IronXL oferece suporte à criação de arquivos Excel em .NET 10, .NET 9, .NET 8, .NET Core, .NET Framework 4.6.2+, executados em ambientes Windows, macOS, Linux, Docker, Azure e AWS.

Como faço para instalar uma biblioteca C# para geração de planilhas Excel?

Instale o IronXL através do Gerenciador de Pacotes NuGet no Visual Studio, usando o comando PM> Install-Package IronXL.Excel , ou faça o download diretamente do nuget.org.

Como faço para criar uma nova planilha do Excel programaticamente?

Crie uma pasta de trabalho usando o IronXL com WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX) e, em seguida, adicione planilhas usando workbook.CreateWorkSheet("SheetName") .

Como posso definir valores de células em uma planilha do Excel usando C#?

Defina valores de células no IronXL usando sintaxe intuitiva: worksheet["A1"].Value = "Hello World" ou defina intervalos: worksheet["A1:A10"].Value = 100 .

Posso aplicar formatação a células do Excel programaticamente?

Sim, o IronXL suporta formatação abrangente, incluindo cores de fundo ( cell.Style.SetBackgroundColor("#FF0000") ), bordas, fontes e formatos de número.

Como faço para usar fórmulas do Excel em C#?

Aplique fórmulas usando a propriedade Formula do IronXL: worksheet["A1"].Formula = "=SUM(B1:B10)" , ou use métodos integrados como range.Sum() , range.Avg() .

Como posso proteger uma planilha do Excel com uma senha?

Proteja as planilhas no IronXL usando worksheet.ProtectSheet("YourPassword") para evitar modificações não autorizadas.

Como faço para configurar as opções de impressão para arquivos do Excel?

Defina as propriedades de impressão usando PrintSetup do IronXL: worksheet.PrintSetup.PrintOrientation = PrintOrientation.Landscape e worksheet.SetPrintArea("A1:Z100") .

Como faço para salvar uma planilha do Excel em formatos diferentes?

Salve planilhas usando o método SaveAs do IronXL: workbook.SaveAs("file.xlsx") para XLSX, ou use SaveAsCsv() , SaveAsJson() para outros formatos.

Como faço para preencher uma planilha do Excel com dados de um banco de dados?

Use o IronXL para preencher planilhas buscando dados de um banco de dados e definindo-os em células usando métodos como worksheet["A1"].Value = dataFromDatabase .

Como posso implementar o congelamento de painéis em uma planilha do Excel usando C#?

Congele painéis em planilhas usando IronXL com worksheet.FreezePanes(1, 1) para bloquear a linha superior e a coluna mais à esquerda para facilitar a navegação.

Jacob Mellor, Diretor de Tecnologia da Team Iron
Diretor de Tecnologia

Jacob Mellor é Diretor de Tecnologia da Iron Software e um engenheiro visionário pioneiro na tecnologia C# PDF. Como desenvolvedor original do código-fonte principal da Iron Software, ele moldou a arquitetura de produtos da empresa desde sua criação, transformando-a, juntamente com o CEO Cameron Rimington, em uma ...

Leia mais
Pronto para começar?
Nuget Downloads 2,134,203 | Versão: 2026.7 recém-lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronXL.Excel
executar um exemplo Veja seus dados se transformarem em uma planilha.