DEV Community

Mateus Machado
Mateus Machado

Posted on

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 
Enter fullscreen mode Exit fullscreen mode

Usando a .NET CLI:

dotnet add package ClosedXML 
Enter fullscreen mode Exit fullscreen mode

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; } } 
Enter fullscreen mode Exit fullscreen mode

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); 
Enter fullscreen mode Exit fullscreen mode

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"); } 
Enter fullscreen mode Exit fullscreen mode

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"; 
Enter fullscreen mode Exit fullscreen mode

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; 
Enter fullscreen mode Exit fullscreen mode

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++; } 
Enter fullscreen mode Exit fullscreen mode

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"); 
Enter fullscreen mode Exit fullscreen mode

Resultado

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

Image description

Top comments (0)