Neste artigo aprenderemos como gerar um relatório que
pode ser aberto no Excel.
A grande vantagem de usar o Excel como base é a flexibilidade
para o usuário que é mais habituado com as ferramentas do Office e poderá adaptar,
formatar e personalizar os dados extraídos conforme sua necessidade.
Vamos
começar?!
Aplicação
A parte de criar um projeto não será abordada neste artigo.
Neste exemplo usarei uma aplicação Windows Forms e a linguagem C#, mas é claro
que poderá ser utilizado em qualquer tipo de aplicação e linguagem fazendo
algumas adaptações conforme sua escolha. Criaremos o projeto conforme a figura
1.

Figura 1 – Projeto criado.
1.
Renomeie o Form1 para GerandoRelatorioEmExcel
2.
Nomeie o botão gerar relatório para btnGerarRelatorio
Após criar o projeto, vamos para o banco de dados.
Banco
de Dados
Criaremos uma tabela chamada clientes para gerarmos alguns dados
no nosso relatório conforme a figura 2 e a listagem 1.

Figura 2 – Tabela clientes.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CLIENTES]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[CLIENTES](
[CODIGO] [int] IDENTITY(1,1) NOT NULL,
[NOME] [varchar](30) NULL,
[ENDERECO] [varchar](50) NULL,
[BAIRRO] [nchar](30) NULL,
[CIDADE] [nchar](20) NULL,
CONSTRAINT [PK_CLIENTES_1] PRIMARY KEY CLUSTERED
(
[CODIGO] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
Listagem 1 – Código para criação da tabela clientes.
Após a criação da tabela, incluiremos 2 registros conforme a
listagem 2.
INSERT INTO
CLIENTES (NOME,ENDERECO,BAIRRO,CIDADE) VALUES ('Fernanda','Rua das flores, 21','Jardins','São Paulo')
INSERT INTO
CLIENTES (NOME,ENDERECO,BAIRRO,CIDADE) VALUES ('Marcos','Rua dos Cravos, 21','Jardins','São Paulo')
Listagem 2 – Inclusão de 2 registros na tabela clientes.
Após termos finalizado a parte de banco de dados, voltemos para
a aplicação.
Aplicação
O formulário GerandoRelatorioEmExcel.cs ficará conforme a
listagem 3.
using System;
using
System.Collections.Generic;
using
System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using
System.Windows.Forms;
using System.Data.Sql;
using
System.Data.SqlClient;
using
System.Configuration;
//namespace incluído para a classe
StreamWriter
using System.IO;
namespace
GerandoRelatorioEmExcel
{
public
partial class GerandoRelatorioEmExcel : Form
{
public GerandoRelatorioEmExcel()
{
InitializeComponent();
}
// contém o código para gerar
relatório
private void btnGerarRelatorio_Click(object
sender, EventArgs e)
{
// Endereço
onde salvar o arquivo + nome do arquivo + extensão .CSV
string
endereco = "C:\\relatorio.csv";
using (StreamWriter
writer = new StreamWriter(endereco, false, Encoding.GetEncoding("iso-8859-15")))
{
//
Cabeçalho
writer.WriteLine("Código;Nome;Endereço;Cidade");
//
Conexão com o banco de dados
string conexao = ConfigurationManager.ConnectionStrings["Projeto"].ConnectionString;
using (SqlConnection
conn = new SqlConnection(conexao))
{
string
query = "SELECT
CODIGO,NOME,ENDERECO,BAIRRO,CIDADE FROM CLIENTES";
SqlCommand sqlComand = new SqlCommand(query,
conn);
conn.Open();
using (IDataReader
reader = sqlComand.ExecuteReader())
{
while
(reader.Read())
{
// escrevendo os registros
writer.WriteLine(Convert.ToString(reader["CODIGO"]) + ";"
+ Convert.ToString(reader["NOME"]) + ";"
+ Convert.ToString(reader["ENDERECO"]) + ";"
+ Convert.ToString(reader["BAIRRO"]) + ";"
+ Convert.ToString(reader["CIDADE"]));
}
}
conn.Close();
}
}
// mensagem de arquivo
gerado com sucesso.
MessageBox.Show("Relatório gerado com sucesso.", "ATENÇÃO", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
}
Listagem 2 – Código do formulário.cs.
Ao
executar a aplicação o resultado do arquivo será gerado no endereço informado o
ícone com o nome relatorio.csv e ao abri-lo será exibido o relatório
conforme a figura 3.

Espero que tenham gostado.
Até o próximo artigo.