Neste post, irei falar sobre os relatórios que são imprescindíveis em qualquer projeto, independente da complexibilidade.

Demonstrarei um exemplo que utiliza o excel como base, a grande vantagem neste caso é flexibilidade para o usuário que mais habituado com as ferramentas do office conseguirá adaptar, formatar e personalizar os dados extraídos conforme sua necessidade.

Vamos começar ?!

Criei uma página aspx (listagem 1).

No aspx: inclui uma label

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GerandoRelatorioExcel.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lblMensagem" runat="server"></asp:Label>
    </div>
    </form>
</body>
</html>

Listagem 1 - Código da página.

No aspx.cs (listagem 2)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

// namespace para StringBuilder
using System.Text;

namespace GerandoRelatorioExcel
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            GerarExcel();
        }

        private void GerarExcel()
        {
            StringBuilder excel = new StringBuilder();

            try
            {
                //Gera o cabeçalho do relatório
                excel.Append(GerarCabecalho());

                //Gera os registros do relatório
                excel.Append(GeraRegistros());

                //Se estiver definido como true, o ASP.NET processará toda a página e depois de concluído, mandará o output para o cliente
                //Se estiver definido como false, o ASP.NET já irá enviando o output para o cliente na medida em que a página vai sendo processada
                HttpContext.Current.Response.BufferOutput = false;

                //Limpa o response
                HttpContext.Current.Response.Clear();

                //Nome dado para salvar o relatório. Por exemplo: relatório gerado dia 30/03/2009 vai ter o nome de: rel_participants_30/03/2009
                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=rel_participants_" + DateTime.Now.ToString("d") + ".xls");

                //Tipo de aplicação que será gerado o relatório. Aqui será p excel.
                HttpContext.Current.Response.ContentType = "application/ms-excel";                

                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Unicode;

                //StringBuilder excel vai receber tudo que está no response
                HttpContext.Current.Response.Write(excel.ToString());

                //Envia imediatamente ao browser todo o conteúdo em buffer
                HttpContext.Current.Response.Flush();

                //Finaliza o response e é exibido até a linha onde se encontra o comando
                HttpContext.Current.Response.End();
            }
            catch
            {
                //A label criada no aspx só serve para mostrar a mensagem de erro, caso ocorra problemas ao gerar o relatório
                lblMensagem.Text = "Ocorreu um erro durante geração do relatório. Tente novamente.";
            } 
        }

        private string GeraRegistros()
        {
            StringBuilder registros = new StringBuilder();

            /*Aqui inclui diretamente os valores que aparecerão no relatório. 
              Mas vcs criarão seus métodos para trazer os registros
            */
           
            //Preenchimento dos campos que mostrarei no meu relatório
            registros.Append(DateTime.Now.ToString("d") + "\t");
            registros.Append("Fernanda Sallai" + "\t");
            registros.Append("Fernanda Sallai" + Environment.NewLine);           

            return (registros.ToString()); 
        }       

        /// 
        /// Gerar cabeçalho
        /// 
        /// 
        private string GerarCabecalho()
        {
            StringBuilder cabecalho = new StringBuilder();

            cabecalho.Append("Data" + "\t");
            cabecalho.Append("Nome" + "\t");         
            cabecalho.Append("Login" + Environment.NewLine);

            return (cabecalho.ToString()); 
        }
    }
}

Listagem 2 - Código para gerar o relatório.

Realizados todos esses passos, ao acessar essa página irá ser exibida a caixa de diálogo e o relatório nas figuras 1 e 2:

Figura 1 - Opção de abrir ou salvar relatório.

Figura 2 - Relatório gerado.

Projeto disponível: GerandoRelatorioExcel.rar (20,57 kb)


Comentários

Adriano Almeida Brazil

segunda-feira, 30 de março de 2009 12:30

Adriano Almeida

Parabéns Fernanda, ficou muito bom !

fernandasallai Brazil

segunda-feira, 30 de março de 2009 19:39

fernandasallai

Obrigada Adriano.
Valeu pela dica....

Guilherme Brazil

sábado, 5 de setembro de 2009 13:44

Guilherme

Parabéns Fernanda pelo artigo.
Ele me ajudará muito com meus relatórios.

Muitíssimo obrigado

fernandasallai Brazil

domingo, 13 de setembro de 2009 6:03

fernandasallai

Obrigada.

Fiquei feliz por ter lhe ajudado.

Levi Brazil

terça-feira, 22 de setembro de 2009 5:14

Levi

Olá fernanda, td bem?

Eu fiz esta função, porém quando vou abrir o .xls o excel exibe a seguinte mensagem: "O arquivo que vc está tentando abrir, 'arquivo.xls', está em formato diferente so especificado pela extensão do arquivo."
O excel está sendo gerado normalmente, porém esta mensagem está incomodando o cliente, vc conhece alguma solução para isto?

obrigado, aguardo respostas...

Levi
levi.ns@hotmail.com

fernandasallai Brazil

segunda-feira, 28 de setembro de 2009 11:49

fernandasallai

Oi Levi...

Tente salvar com a extensão .csv ...

Qualquer coisa me avise...

neliton Brazil

sexta-feira, 30 de outubro de 2009 10:28

neliton

tenho uma duvida

tenho um relatorio no excel e precisava gerar esse relatorio em formato txt para importa-lo para outro programa.

tem como fazer uma macro para fazer isso, expecificando o tamanho da coluna que eu quero ??

neliton
uberlandia-mg

fernandasallai Brazil

sábado, 31 de outubro de 2009 20:24

fernandasallai

Oi Neliton,

Para gerar o relatório em txt basta alterar :

HttpContext.Current.Response.ContentType = "text/plain";

Qualquer coisa avise

Fabrício Sanchez Brazil

quarta-feira, 27 de abril de 2011 17:19

Fabrício Sanchez

Grande Fer...

Parabéns minha amiga. É muito bom tê-la devolta com seus ótimos posts.
Que tal replicar na comunidade .NET Interior?

Beijos,

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Fernanda Sallai

Sem a curiosidade que me move, que me inquieta, que me insere na busca, não aprendo nem ensino - Paulo Freire