Fernanda Sallai

Blog de desenvolvimento e negócios.

Cursos de férias

Pessoal,

Estão abertas as matrículas para os cursos da IMEJR-USP.

Atualmente, oferem três cursos relacionados a plataforma .NET:

* C# e Orientação a Objetos - 40h
* Desenvolvimento web com ASP.NET MVC - 40h
* Laboratório de ASP.NET MVC avançado - 24h

Para obter mais informações sobre valores, datas e horários entre em contato através do site www.ime.usp.br/imejr.

Bons estudos...

C# - Gerando relatório em excel

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:

No aspx: inclui uma label

<asp:Label ID="lblWarning" runat="server"></asp:Label>

No aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    //inclui a chamada do método GenerateExcel()
    GenerateExcel();
}

//Método para gerar o relatório em excel 
protected void GenerateExcel()
{   
    StringBuilder excel = new StringBuilder();

    try
    {
        //StringBuilder excel vai receber o conteúdo do método GetHeader()
        excel.Append(GetHeader());
        //StringBuilder excel vai receber o conteúdo do método GetRecords()
        excel.Append(GetRecords());

        //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
        lblWarning.Text = "Ocorreu um erro durante geração do relatório. Tente novamente.";
    }           
}

          //Método que retorna o cabeçalho do relatório
          private string GetHeader()
          {
            StringBuilder header = new StringBuilder();
            header.Append("Data" + "\t");
            header.Append("Nome" + "\t");
            header.Append("Endereço" + "\t");
            header.Append("Email" + "\t");
            header.Append("Telefone" + "\t");
            header.Append("Celular" + "\t");
            header.Append("Sexo" + "\t");
            header.Append("Data de aniversário" + "\t");
            header.Append("RG" + "\t");
            header.Append("Nome do responsável" + "\t");
            header.Append("RG do responsável" + "\t");
            header.Append("Como ficou sabendo da promoção" + "\t");
            header.Append("Login" + Environment.NewLine);

            return (header.ToString());
          }

        //Método que retorna os registros do relatório
        private string GetRecords()
        {
            StringBuilder records = new StringBuilder();
   
            //Incluir o método que irá trazer os registros que necessitem para seu relatório
            //No meu caso, fiz um método que retorna uma lista de participantes
            foreach (Participant participants in Participant.ListParticipants())
            {
                //Preenchimento dos campos que mostrarei no meu relatório
                records.Append(participants.DateIns.ToString("d") + "\t");
                records.Append(participants.Name + "\t");
                records.Append(participants.Address + "\t");
                records.Append(participants.Email + "\t");
                records.Append(" " + participants.Phone + "\t");
                records.Append(" " + participants.Cell + "\t");
                records.Append(participants.Sex + "\t");
                records.Append(" " + participants.DateOfBirth.ToString("d") + "\t");
                records.Append(" " + participants.Rg + "\t");
                records.Append(participants.ResponsableName + "\t");
                records.Append(" " + participants.ResponsableRg + "\t");
                records.Append(participants.KnowAsThePromotion + "\t");
                records.Append(participants.Login + Environment.NewLine);
            }

            return (records.ToString());
        }

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

 

 

Sobre mim...

Olá… Meu nome é Fernanda Sallai. Bacharel em Sistemas de Informação e atuo na área de desenvolvimento.

Colaboradora do Portal Linha de Código e editora da revista Codificando.Net.

Estou sempre em busca de novos conhecimentos e espero compartilhá-los aqui no blog.

Obrigada pela visita e bons estudos.