# How to Create an Excel File in C# (.NET Tutorial)
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.
*as-heading:2(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.
```cs
:title=Create Excel File in One Line!
WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
```
---
<div class="hsg-featured-snippet">
<h3>Fluxo de trabalho mínimo (5 etapas)</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronXL.Excel/">Baixe e instale a biblioteca IronXL C#.</a></li>
<li>Configure seu projeto .NET</li>
<li>Crie um <code>Workbook</code> e um <code>Worksheet</code></li>
<li>Definir valores de células, formatação e fórmulas</li>
<li>Salve seu arquivo do Excel</li>
</ol>
</div>
## O que é o IronXL e por que usá-lo para criar arquivos do Excel?
[IronXL](/csharp/excel/) é 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 `$liteLicense`
### Como posso criar e salvar um arquivo do Excel rapidamente?
[Instale o IronXL via NuGet](https://www.nuget.org/packages/IronXL.Excel/) ou [baixe a DLL diretamente](/csharp/excel/packages/IronXL.zip) . 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:
```shell
:ProductInstall
```
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.

**Figura 3** - *Acessar Gerenciador de Pacotes NuGet através do menu Projeto*

**Figura 4** - *Menu de contexto de clique direito no Solution Explorer*
Procure por `IronXL.Excel` na lista de pacotes e clique em Instalar.
<br />

**Figura 5** - *Instalando IronXL.Excel através do Gerenciador de Pacotes NuGet*
Alternativamente, [baixe o DLL IronXL diretamente](/csharp/excel/packages/IronXL.zip) e adicione como referência ao seu projeto via Solution Explorer > Referências > Procurar por `IronXL.dll`.

**Figura 6** - *Baixar a biblioteca IronXL do site oficial*
[[i:(O 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
<br />
<center>
<a rel="nofollow" href="/img/tutorials/create-excel-file-net/new-project-asp-net.png" target="_blank"><p><img src="/img/tutorials/create-excel-file-net/new-project-asp-net.png" alt="Caixa de diálogo Novo Projeto do Visual Studio com a opção Aplicativo Web ASP.NET selecionada" class="img-responsive add-shadow img-margin" style="max-width:100%; margin: 0;" /></p></a>
</center>
<strong style="margin-left: 40px;">Figura 1</strong> – *Create new ASP.NET project*
5. Clique em OK
6. Selecione o modelo de Formulários Web
<center>
<a rel="nofollow" href="/img/tutorials/create-excel-file-net/web-form.png" target="_blank"><p><img src="/img/tutorials/create-excel-file-net/web-form.png" alt="Seleção de modelo de projeto ASP.NET mostrando a opção Web Forms" class="img-responsive add-shadow img-margin" style="max-width:100%; margin: 0;" /></p></a>
</center>
<strong style="margin-left: 40px;">Figura 2</strong> – *Select Web Forms template*
<br />
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:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-3.cs
```
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`:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-4.cs
```
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:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-5.cs
```
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:
```csharp
// 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
```
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:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-7.cs
```
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:
```csharp
// 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");
}
}
```
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:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-9.cs
```
O IronXL suporta vários [tipos de borda,](/csharp/excel/object-reference/api/IronXL.Styles.BorderType.html) 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:
```csharp
// 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();
```
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.
[[t:(Prefira 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:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-11.cs
```
A proteção da planilha impede modificações acidentais, enquanto [o congelamento de painéis](/csharp/excel/how-to/add-freeze-panes/) mantém linhas ou colunas importantes visíveis durante a rolagem.

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

**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`:
```csharp
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-12.cs
```
A classe `IPrintSetup` fornece opções de configuração de impressão abrangentes correspondentes às configurações de impressão do Excel.

**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:
```csharp
// 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);
```
O IronXL suporta vários [formatos de exportação](/csharp/excel/how-to/convert-spreadsheet-file-types/) , 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](#sample-project) 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:
```cs
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";
```
### 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.
<a id="sample-project"></a>
### 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:
```cs
:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-15.cs
```
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](/csharp/excel/object-reference/api/) 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:
- [Ler e editar arquivos Excel existentes](/csharp/excel/tutorials/how-to-read-excel-file-csharp/)
[Mesclar células no Excel](/csharp/excel/how-to/csharp-excel-merge-cells/)
- [Criar gráficos do Excel em C#](/csharp/excel/how-to/csharp-excel-chart-create-edit-tutorial/)
- [Guia de formatação e estilização de célula](/csharp/excel/how-to/set-cell-data-format/)
- [Converter entre formatos de planilha](/csharp/excel/how-to/convert-spreadsheet-file-types/)
## 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](trial-license) ou [veja as opções de licenciamento](/csharp/excel/licensing/) .
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.
1Install IronXL with NuGet Package Manager
PM > Install-Package IronXL.Excel
Install-Package IronXL.Excel
2Copie 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");
WorkBook book = IronXL.WorkBook.Create(IronXL.ExcelFileFormat.XLSX); book.CreateWorkSheet("Sheet1")["A1"].Value = "Hello World"; book.SaveAs("MyFile.xlsx");
C#
3Implante para testar em seu ambiente de produção.
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:
PM > Install-Package IronXL.Excel
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.
Figura 3 - Acessar Gerenciador de Pacotes NuGet através do menu Projeto
Figura 4 - Menu de contexto de clique direito no Solution Explorer
Procure por IronXL.Excel na lista de pacotes e clique em Instalar.
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.
Figura 6 - Baixar a biblioteca IronXL do site oficial
Observe: O 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:
Abra o Visual Studio
Clique em Arquivo > Novo Projeto
Selecione Web em Visual C# na lista Tipo de projeto.
Selecione Aplicativo Web ASP.NET
Figura 1 – Create new ASP.NET project
Clique em OK
Selecione o modelo de Formulários Web
Figura 2 – Select Web Forms template
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:
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:
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
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 dataRandom r = new Random();// Populate cells with random budget data for each monthfor (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 valueworkSheet["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 dataDim r As New Random()' Populate cells with random budget data for each monthFor i AsInteger = 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) ' MiscNext i' Alternative: Set range of cells with same valueworkSheet("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
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:
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 colorworkSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");// Apply different colors for data categorizationworkSheet["A2:A11"].Style.SetBackgroundColor("#E7F3FF"); // Light blue for JanuaryworkSheet["B2:B11"].Style.SetBackgroundColor("#FFF2CC"); // Light yellow for February// Highlight important cells with bold colorsworkSheet["L12"].Style.SetBackgroundColor("#FF0000"); // Red for totalsworkSheet["L12"].Style.Font.FontColor = "#FFFFFF"; // White text// Create alternating row colors for better readabilityfor (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 colorworkSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")' Apply different colors for data categorizationworkSheet("A2:A11").Style.SetBackgroundColor("#E7F3FF") ' Light blue for JanuaryworkSheet("B2:B11").Style.SetBackgroundColor("#FFF2CC") ' Light yellow for February' Highlight important cells with bold colorsworkSheet("L12").Style.SetBackgroundColor("#FF0000") ' Red for totalsworkSheet("L12").Style.Font.FontColor = "#FFFFFF" ' White text' Create alternating row colors for better readabilityFor row AsInteger = 2 To 11 If row Mod2 = 0 Then workSheet($"A{row}:L{row}").Style.SetBackgroundColor("#F2F2F2") End IfNext row
' 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
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:
// Use IronXL built-in aggregationsdecimal 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 cellsworkSheet["A12"].Value = sum;workSheet["B12"].Value = avg;workSheet["C12"].Value = max;workSheet["D12"].Value = min;
// 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 aggregationsDim sum AsDecimal = workSheet("A2:A11").Sum()Dim avg AsDecimal = workSheet("B2:B11").Avg()Dim max AsDecimal = workSheet("C2:C11").Max()Dim min AsDecimal = workSheet("D2:D11").Min()' Assign value to cellsworkSheet("A12").Value = sumworkSheet("B12").Value = avgworkSheet("C12").Value = maxworkSheet("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
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 rangesdecimal 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 cellsworkSheet["A12"].Value = sum;workSheet["B12"].Value = avg;workSheet["C12"].Value = max;workSheet["D12"].Value = min;// Or use Excel formulas directlyworkSheet["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 functionsworkSheet["E12"].Formula = "=IF(SUM(E2:E11)>50000,\"Over Budget\",\"On Track\")";workSheet["F12"].Formula = "=SUMIF(F2:F11,\">5000\")";// Percentage calculationsworkSheet["G12"].Formula = "=G11/SUM(G2:G11)*100";workSheet["G12"].FormatString = "0.00%";// Ensure all formulas calculateworkBook.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();
C#
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.
Pontas: Prefira 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:
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.
Figura 7 - A linha de cabeçalho congelada permanece visível enquanto rola
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:
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx")
workBook.SaveAs("Budget.xlsx")
A classe IPrintSetup fornece opções de configuração de impressão abrangentes correspondentes às configurações de impressão do Excel.
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 compatibilityworkBook.SaveAs("Budget.xls");// Save as CSV for data exchangeworkBook.SaveAsCsv("Budget.csv");// Save as JSON for web applicationsworkBook.SaveAsJson("Budget.json");// Save to stream for web downloads or cloud storageusing (var stream = new MemoryStream()){ workBook.SaveAs(stream); byte[] excelData = stream.ToArray(); // Send to client or save to cloud}// Save with specific encoding for international charactersworkBook.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 compatibilityworkBook.SaveAs("Budget.xls")' Save as CSV for data exchangeworkBook.SaveAsCsv("Budget.csv")' Save as JSON for web applicationsworkBook.SaveAsJson("Budget.json")' Save to stream for web downloads or cloud storageUsing stream = New MemoryStream() workBook.SaveAs(stream) Dim excelData() AsByte = stream.ToArray() ' Send to client or save to cloudEndUsing' Save with specific encoding for international charactersworkBook.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)
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:
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"
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:
// 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");
// 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");
ImportsSystemImportsSystem.DiagnosticsImportsIronXLModuleProgram Sub Main()License.LicenseKey = Environment.GetEnvironmentVariable("IRONXL_LICENSE_KEY") Dim sw AsStopwatch = Stopwatch.StartNew() Dim workbook AsWorkBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim sheet AsWorkSheet = workbook.CreateWorkSheet("Data") sheet("A1").Value = "Id" sheet("B1").Value = "Name" sheet("C1").Value = "Amount" For i AsInteger = 0 To 9999 Dim row AsInteger = 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 SubEndModule
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
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:
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.
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 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 empresa com mais de 50 funcionários que atende à NASA, Tesla e agências governamentais globais.