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

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs