Automatizando a criação de planilhas com .NET

Trabalhando com desenvolvimento de software, existe a necessidade de se apresentar os dados presentes no sistema, seja por gráficos, dashboards ou relatórios. E quando trabalhamos com relatórios, evidentemente já vem a cabeça as planilhas no Microsoft Excel. Trabalhando com .NET, existem diversos pacotes que permitem a criação e manipulação de planilhas, porém o mais prático e amigável ao usuário é o ClosedXML. O que é ClosedXML ClosedXML é um pacote open-source para leitura, manipulação e criação de arquivos Excel (.xlsx) de forma intuitiva e amigável para o usuário. Utilizando esse pacote é possível trabalhar com planilhas com um código de fácil leitura e manutenção, também é uma grande vantagem do pacote não necessitar do Excel na máquina que está executando o código. Adicionando a biblioteca ao projeto Primeiro, vamos instalar o ClosedXML no nosso projeto. Usando o Package Manager Console: PM> Install-Package ClosedXML Usando a .NET CLI: dotnet add package ClosedXML Implementação Neste exemplo, vamos montar uma simples planilha, composta apenas de uma aba, com orientação horizontal e um cabeçalho na primeira linha. A seguinte classe Usuario será usada como base para montar os dados do relatório. class Usuario() { public Guid Id { get; set; } public DateTime DataCriacao { get; set; } public DateTime DataAlteracao { get; set; } public DateTime? DataDesativacao { get; set; } public bool IndAtivo { get; set; } public string Nome { get; set; } public string Email { get; set; } public string Senha { get; set; } } Para gerar uma lista de usuários para preencher o relatório, foi utilizada a biblioteca Bogus, como mostra o código abaixo . var userFaker = new Faker(locale: "pt_BR").StrictMode(false).Rules((f, u) => { u.Id = f.Random.Guid(); u.DataCriacao = f.Date.Past(); u.DataAlteracao = f.Date.Past(); u.IndAtivo = f.Random.Bool(); u.DataDesativacao = u.IndAtivo ? null : f.Date.Past(); u.Nome = f.Person.FullName; u.Email = f.Person.Email; u.Senha = f.Internet.Password(); }); var users = userFaker.Generate(10); Inicializando a planilha Para começarmos a confecção do arquivo, vamos instanciar nossa planilha e adicionar a aba em que vamos trabalhar. using ClosedXML.Excel; using (var workbook = new XLWorkbook()) { var worksheet = workbook.Worksheets.Add("Users Demo"); } Montando o cabeçalho Com nossa aba da planilha criada, já podemos iniciar a montagem do cabeçalho. Como queremos que o cabeçalho seja apresentado na horizontal, precisamos acessar as células da primeira linha da planilha. Podemos fazer isso utilizando o método Cell da interface IXLWorksheet, passando a linha e a coluna da célula que desejamos acessar como parâmetro. Vamos pegar as informações mais pertinentes da classe Usuario e preencher as informações. var row = 1; //Preenchendo o cabeçalho worksheet.Cell(row, 1).Value = "Nome"; worksheet.Cell(row, 2).Value = "Email"; worksheet.Cell(row, 3).Value = "Data de criação"; worksheet.Cell(row, 4).Value = "Data de alteração"; worksheet.Cell(row, 5).Value = "Status"; worksheet.Cell(row, 6).Value = "Data de desativação"; Agora vamos estilizar essa primeira linha do relatório. Para isso utilizamos o método Cells da interface IXLWorksheet, utilizando o parâmetro usedCellsOnly para obter apenas as células que utilizamos até então, e acessamos as diferentes propriedades de estilo. Vamos então deixar o texto em negrito, colorir o background das células com um cinza claro e centralizar o texto verticalmente e horizontalmente. //Formatando e estilizando o cabeçalho var header = worksheet.Cells(usedCellsOnly: true); header.Style.Font.Bold = true; header.Style.Fill.BackgroundColor = XLColor.LightGray; header.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center; header.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center; Inserindo os dados no relatório Com o nosso cabeçalho pronto, podemos seguir inserindo no relatório os dados que geramos previamente. Primeiro incrementamos a nossa variável row para acessarmos a próxima linha. Seguindo para um foreach que percorre a nossa lista de usuários, insere os dados em suas respectivas células e incrementa a variável row antes de seguir para o próximo usuário da lista. row++; //Inserindo dados no relatório foreach (var user in users) { worksheet.Cell(row, 1).Value = user.Nome; worksheet.Cell(row, 2).Value = user.Email; worksheet.Cell(row, 3).Value = user.DataCriacao.ToString("yyyy-MM-dd"); worksheet.Cell(row, 4).Value = user.DataAlteracao.ToString("yyyy-MM-dd"); worksheet.Cell(row, 5).Value = user.IndAtivo ? "Ativo" : "Inativo"; worksheet.Cell(row, 6).Value = user.DataDesativacao?.ToString("yyyy-MM-dd") ?? string.Empty; row++;

Feb 9, 2025 - 23:04
 0
Automatizando a criação de planilhas com .NET

Trabalhando com desenvolvimento de software, existe a necessidade de se apresentar os dados presentes no sistema, seja por gráficos, dashboards ou relatórios.

E quando trabalhamos com relatórios, evidentemente já vem a cabeça as planilhas no Microsoft Excel. Trabalhando com .NET, existem diversos pacotes que permitem a criação e manipulação de planilhas, porém o mais prático e amigável ao usuário é o ClosedXML.

O que é ClosedXML

ClosedXML é um pacote open-source para leitura, manipulação e criação de arquivos Excel (.xlsx) de forma intuitiva e amigável para o usuário.
Utilizando esse pacote é possível trabalhar com planilhas com um código de fácil leitura e manutenção, também é uma grande vantagem do pacote não necessitar do Excel na máquina que está executando o código.

Adicionando a biblioteca ao projeto

Primeiro, vamos instalar o ClosedXML no nosso projeto.

Usando o Package Manager Console:

PM> Install-Package ClosedXML

Usando a .NET CLI:

dotnet add package ClosedXML

Implementação

Neste exemplo, vamos montar uma simples planilha, composta apenas de uma aba, com orientação horizontal e um cabeçalho na primeira linha.

A seguinte classe Usuario será usada como base para montar os dados do relatório.

class Usuario()  
{  
    public Guid Id { get; set; }  
    public DateTime DataCriacao { get; set; }  
    public DateTime DataAlteracao { get; set; }  
    public DateTime? DataDesativacao { get; set; }  
    public bool IndAtivo { get; set; }  
    public string Nome { get; set; }  
    public string Email { get; set; }   
    public string Senha { get; set; }  
}

Para gerar uma lista de usuários para preencher o relatório, foi utilizada a biblioteca Bogus, como mostra o código abaixo .

var userFaker = new Faker<Usuario>(locale: "pt_BR").StrictMode(false).Rules((f, u) =>  
{  
    u.Id = f.Random.Guid();  
    u.DataCriacao = f.Date.Past();  
    u.DataAlteracao = f.Date.Past();  
    u.IndAtivo = f.Random.Bool();  
    u.DataDesativacao = u.IndAtivo ? null : f.Date.Past();  
    u.Nome = f.Person.FullName;  
    u.Email = f.Person.Email;  
    u.Senha = f.Internet.Password();  
});  

var users = userFaker.Generate(10);

Inicializando a planilha

Para começarmos a confecção do arquivo, vamos instanciar nossa planilha e adicionar a aba em que vamos trabalhar.

using ClosedXML.Excel;

using (var workbook = new XLWorkbook())
{
    var worksheet = workbook.Worksheets.Add("Users Demo");
}

Montando o cabeçalho

Com nossa aba da planilha criada, já podemos iniciar a montagem do cabeçalho.

Como queremos que o cabeçalho seja apresentado na horizontal, precisamos acessar as células da primeira linha da planilha.
Podemos fazer isso utilizando o método Cell da interface IXLWorksheet, passando a linha e a coluna da célula que desejamos acessar como parâmetro.

Vamos pegar as informações mais pertinentes da classe Usuario e preencher as informações.

var row = 1;  

//Preenchendo o cabeçalho  
worksheet.Cell(row, 1).Value = "Nome";  
worksheet.Cell(row, 2).Value = "Email";  
worksheet.Cell(row, 3).Value = "Data de criação";  
worksheet.Cell(row, 4).Value = "Data de alteração";  
worksheet.Cell(row, 5).Value = "Status";  
worksheet.Cell(row, 6).Value = "Data de desativação";  

Agora vamos estilizar essa primeira linha do relatório. Para isso utilizamos o método Cells da interface IXLWorksheet, utilizando o parâmetro usedCellsOnly para obter apenas as células que utilizamos até então, e acessamos as diferentes propriedades de estilo.

Vamos então deixar o texto em negrito, colorir o background das células com um cinza claro e centralizar o texto verticalmente e horizontalmente.

//Formatando e estilizando o cabeçalho  
var header = worksheet.Cells(usedCellsOnly: true);  

header.Style.Font.Bold = true;  
header.Style.Fill.BackgroundColor = XLColor.LightGray;  
header.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  
header.Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;

Inserindo os dados no relatório

Com o nosso cabeçalho pronto, podemos seguir inserindo no relatório os dados que geramos previamente.

Primeiro incrementamos a nossa variável row para acessarmos a próxima linha.
Seguindo para um foreach que percorre a nossa lista de usuários, insere os dados em suas respectivas células e incrementa a variável row antes de seguir para o próximo usuário da lista.

row++;  

//Inserindo dados no relatório  
foreach (var user in users)  
{  
    worksheet.Cell(row, 1).Value = user.Nome;  
    worksheet.Cell(row, 2).Value = user.Email;  
    worksheet.Cell(row, 3).Value = user.DataCriacao.ToString("yyyy-MM-dd");  
    worksheet.Cell(row, 4).Value = user.DataAlteracao.ToString("yyyy-MM-dd");  
    worksheet.Cell(row, 5).Value = user.IndAtivo ? "Ativo" : "Inativo";  
    worksheet.Cell(row, 6).Value = user.DataDesativacao?.ToString("yyyy-MM-dd") ?? string.Empty;  

    row++;
}

Salvando o arquivo

Para salvar o arquivo, podemos utilizar o método SaveAs do nosso workbook, passando o caminho onde será criado o arquivo como string.

OBS.: Passando apenas o nome do arquivo, o mesmo será criado no mesmo diretório do executável que o gerou.

workbook.SaveAs("Usuarios.xlsx");

Resultado

Ao executar o código que montamos, ele irá gerar uma planilha semelhante a essa.

Image description