C# - Gerando arquivos no formato Excel com EPPlus

 Hoje vou apresentar a biblioteca EPPlus que permite gerar arquivos no formato Excel sem precisar usar a interoperabilidade nem ter o Office instalado.

Gerar relatórios no formato Excel para gerenciar os dados é uma tarefa comum em muitas empresas. Para fazer isso  na plataforma .NET temos que usar os recursos da interoperabilidade, e,  dessa forma a máquina onde que vai gerar os arquivos no formato Excel precisa ter o Excel instalado.

A biblioteca EPPlus consegue gerar e manipular arquivos Excel sem precisar usar a interoperabilidade e assim não requer que o Office esteja instalado. Ela gera arquivos no formato Excel compatível com o Open Office XML e tem uma API simples de usar.

Para usar esta biblioteca em seu projeto basta instalar o pacote Nuget : EPPlus

Install-Package EPPlus -Version 5.6.0

Se você quiser mais informações detalhadas com exemplos, consulte a documentação no site oficial :
https://www.epplussoftware.com/pt

Conceitos básicos

O EPPlus trata o arquivo Excel como um pacote (package) que possui um Workbook e, dentro do Workbook existem as planilhas(sheets).

A estrutura básica é a seguinte:

  1. ExcelPackage - O objeto ExcelPackage que representa o pacote Excel. Este é o arquivo principal de trabalho;
  2. ExcelWorkBook - No pacote temos o objeto ExcelWorkbook que armazena todas as planilhas do arquivo;
  3. ExcelWorksheet - No workbook temos objetos ExcelWorksheet que representam as planilhas do workbook e
    assim existe uma instância desta classe para cada planilha no ExcelWorkbook;

Para poder usar os recursos do EPPlus em seu código você tem que declarar a licença usada que pode ser de dois tipos: Comercial e não Comercial conforme será mostrado nos exemplos.

A seguir temos exemplos de uso destes objetos:

- Criar um arquivo Excel e um Workbook

var package = new ExcelPackage();

 

ExcelPackage package = new ExcelPackage();

- Separar um workbook criado em um ExcelPackage

var workbook = package.Workbook; 

 

ExcelWorkbook workbook = package.Workbook;

- Definir a licença usada

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
 

ExcelPackage.LicenseContext = LicenseContext.Commercial;

- Abrir um arquivo Excel gerado ou já existente

var package new ExcelPackage(new FileInfo(“nome_arquivo”);

- Acessar planilhas (sheets) em um WorkBook

var package = new ExcelPackage(new FileInfo("nome_arquivo_excel")); 

var workbook = package.Workbook; 

var sheet = workbook.Worksheets["Nome_Planilha"];

 

- Acessar células das planilhas

var row = 1;

var col = 1;

 

sheet.Cells[row, col].Value = “teste";

 

sheet.Cells["A1"].Value = “teste";

 

sheet.Cells["A1:C1"].Style.Font.Bold = true;

Cabe ressaltar que o EPPlus usa o índice para linha e coluna com base 1. Assim a primeira célula possui linha e coluna com índice de valor igual a 1.

No exemplo acima estamos usando a propriedade Cells e acessando uma célula usando a linha e coluna(row e col) e também usando referência da célula ("A1"),  e ainda podemos acessar um intervalo de células ("A1:C1").

Vejamos a seguir um exemplo básico onde vamos criar um projeto Console no VS 2019 Community, e usando a EPPLus, vamos gerar um arquivo Excel e a seguir acessar e abrir o arquivo gerado.

Criando uma planilha Excel com o EPPlus

Vamos criar um projeto Console chamado C_EPPlus1 e incluir a referência ao pacote Nuget EPPlus 5.6.0.

No método Main vamos incluir o código onde vamos chamar o método CriaPlanilhaExcel() para criar uma planilha de vendas fictícia e e depois o método AbrePlanilhaExcel() onde vamos abrir essa planilha:

         private static void Main(string[] args)
        {
            // define o nome do arquivo .xlsx 
            string caminhoPlanilha = @"c:\Dados\xlx\VendasEPPLus.xlsx";
            Console.WriteLine("Pressione algo para iniciar");
            Console.ReadKey();
            CriaPlanilhaExcel(caminhoPlanilha);
            Console.WriteLine("Pressione algo para acessar e exibi a planilha\n");
            Console.ReadKey();
            AbrePlanilhaExcel(caminhoPlanilha);
            Console.ReadKey();
        }

A seguir temo o código do método CriaPlanilhaExcel() que recebe o caminho e nome do arquivo que será criado.

       private static void CriaPlanilhaExcel(string caminhoPlanilha)
        {
            //cria tipo anônimo com os dados da planilha
            var Vendas = new[]
            {
                new { Id = "SP101", Filial="São Paulo", Vendas = 980 },
                new { Id = "RJ102", Filial="Rio de Janeiro", Vendas = 840 },
                new { Id = "MG103", Filial="Minas Gerais", Vendas = 790 },
                new { Id = "BA104", Filial="Bahia", Vendas = 699 },
                new { Id = "PR105", Filial="Paraná", Vendas = 775 },
                new { Id = "RS106", Filial="Porto Alegre", Vendas = 660 }
            };
            // define a licença
            // cria instância do ExcelPackage 
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            ExcelPackage excel = new ExcelPackage();
            // nome da planilha
            var workSheet = excel.Workbook.Worksheets.Add("PlanilhaVendas");
            // define propriedades da planilha
            workSheet.TabColor = System.Drawing.Color.Black;
            workSheet.DefaultRowHeight = 12;
            // Define propriedades da primeira linha
            workSheet.Row(1).Height = 20;
            workSheet.Row(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            workSheet.Row(1).Style.Font.Bold = true;
            // Define o cabeçalho da planilha(base 1)
            workSheet.Cells[1, 1].Value = "Cod.";
            workSheet.Cells[1, 2].Value = "Filial";
            workSheet.Cells[1, 3].Value = "Vendas/mil";
            workSheet.Cells["A1:C1"].Style.Font.Italic = true;
            // inclui dados na planilha
            // inicia na segunda linha
            int indice = 2;
            foreach (var venda in Vendas)
            {
                workSheet.Cells[indice, 1].Value = venda.Id;
                workSheet.Cells[indice, 2].Value = venda.Filial;
                workSheet.Cells[indice, 3].Value = venda.Vendas;
                indice++;
            }
            // Ajusta o tamanho da coluna
            workSheet.Column(1).AutoFit();
            workSheet.Column(2).AutoFit();
            workSheet.Column(3).AutoFit();
            //se o arquivo existir exclui
            if (File.Exists(caminhoPlanilha))
                File.Delete(caminhoPlanilha);
            // Cria o arquivo excel no disco fisico
            FileStream objFileStrm = File.Create(caminhoPlanilha);
            objFileStrm.Close();
            // Escreve o conteudo para o arquivo excel
            File.WriteAllBytes(caminhoPlanilha, excel.GetAsByteArray());
            //Fecha o arquivo excel
            excel.Dispose();
            Console.WriteLine($"Planilha criada com sucesso em : {caminhoPlanilha}\n");
        }

Será gerado o arquivo no formato excel com extensão .xlsx chamado VendasEPPlus.xlsx que quando aberto mostra o conteúdo a seguir:

O método AbrePlanilhaExcel() recebe o caminho e nome da planilha criada e abre o arquivo percorrendo e exibindo os dados no console:

        private static void AbrePlanilhaExcel(string caminhoPlanilha)
        {
            //abre a planilha criada
            var arquivoExcel = new ExcelPackage(new FileInfo(caminhoPlanilha));

            //Localiza e planilha a ser acessada
            ExcelWorksheet planilhaVendas = arquivoExcel.Workbook.Worksheets.FirstOrDefault();

            //obtem o numero de linhas e colunas
            int rows = planilhaVendas.Dimension.Rows;
            int cols = planilhaVendas.Dimension.Columns;

            // percorre as linhas e colunas da planilha
            for (int i = 1; i <= rows; i++)
            {
                for (int j = 1; j <= cols; j++)
                {
                    string conteudo = planilhaVendas.Cells[i, j].Value.ToString();
                    Console.WriteLine($"{conteudo}");
                }
            }
        }

Executando o projeto iremos ter o seguinte resultado final:

Pegue o projeto completo aqui : C_EPPlus1.zip

"Os que confiam no SENHOR serão como o monte de Sião, que não se abala, mas permanece para sempre."
Salmos 125:1


Referências:


José Carlos Macoratti