none
Exportar para Excel: Formatação RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Estou usando o seguinte código para exportar para Excel;

    protected void ImageButtonExcel_Click(object sender, ImageClickEventArgs e)
            {
                medicoes = (List<Medicao>)Session["acudes"];
    
                Response.AddHeader("content-disposition", "attachment; filename=DocumentoExcel.xls");
                Response.Charset = "UTF-8";
                Response.ContentType = "application/ms-excel";
    
                //Objetos
                StringWriter stringWrite = new System.IO.StringWriter();
                HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    
                //Inclui controles 
                DataGrid dgDados = new DataGrid();
    
                //Definição de cores
                dgDados.HeaderStyle.Font.Bold = true;
                dgDados.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                dgDados.DataSource = criaTabela(medicoes);
                dgDados.DataBind();
    
                //Renderiza o DataGrid
                dgDados.RenderControl(htmlWrite);
    
                //Exporta 
                Response.Write(stringWrite.ToString());
                //encerra
                Response.End();
            }


    O Excel é gerado normalmente, mas a formatação fica assim:

    Estado Bacia Reservatorio Municipio Capacidade Volume VolumePercentual DataInformacao
    BA CONTAS PEDRA JEQUIÉ 1640 485 29,57 17/03/2013
    BA PARAGUAÇU SÃO JOSÉ DO JACUÍPE S. JOSÉ DO JACUIPE 357 29,98 8,4 18/03/2013
    BA RIO DE CONTAS ANAGÉ ANAGÉ-CARAÍBAS 255,63 88,54 34,64 27/02/2013

    Tudo quanto é acento fica errado. Tentei alterar o Response.Charset = "UTF-8" para Response.Charset = "iso-8859-2", mas não fez diferença nenhuma. 

    Alguma ideia do que pode ser?


    quarta-feira, 27 de março de 2013 19:46

Respostas

  • Consegui achar uma solução!

    Acrescentei duas linhas de código:

    Response.ContentEncoding =System.Text.Encoding.GetEncoding(28591);
    Response.HeaderEncoding = System.Text.Encoding.GetEncoding(28591);

    Então ficou assim:

    protected void ImageButtonExcel_Click(object sender, ImageClickEventArgs e)
            {
                medicoes = (List<Medicao>)Session["acudes"];
    
                Response.AddHeader("content-disposition", "attachment; filename=DocumentoExcel.xls");
                Response.Charset = "ISO-8859-1";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding(28591);
                Response.HeaderEncoding = System.Text.Encoding.GetEncoding(28591);
                Response.ContentType = "application/ms-excel";
    
                //Objetos
                StringWriter stringWrite = new System.IO.StringWriter();
                HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    
                //Inclui controles 
                DataGrid dgDados = new DataGrid();
    
                //Definição de cores
                dgDados.HeaderStyle.Font.Bold = true;
                dgDados.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                dgDados.DataSource = criaTabela(medicoes);
                dgDados.DataBind();
    
                //Renderiza o DataGrid
                dgDados.RenderControl(htmlWrite);
    
                //Exporta 
                Response.Write(stringWrite.ToString());
                //encerra
                Response.End();
            }

    Obrigado pela ajuda!

    segunda-feira, 1 de abril de 2013 14:37

Todas as Respostas

  • Rafael,

    Veja este link:
    http://stackoverflow.com/questions/1679656/asp-net-excel-export-encoding-problem

    Pelo que entendi do pessoal comentando, tem a ver a com o BOM (Bytes Order Mark), onde é informado no cabeçalho a codificação necessária para ser utilizada no arquivo.

    Solução proposta pela galera:

    Response.Clear();
    Response.AddHeader("content-disposition","attachment;filename=Test.xls");   
    Response.ContentType = "application/ms-excel";
    Response.ContentEncoding = System.Text.Encoding.Unicode;
    Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
    
    System.IO.StringWriter sw = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);
    
    FormView1.RenderControl(hw);
    
    Response.Write(sw.ToString());
    Response.End();


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 1 de abril de 2013 13:01
  • Consegui achar uma solução!

    Acrescentei duas linhas de código:

    Response.ContentEncoding =System.Text.Encoding.GetEncoding(28591);
    Response.HeaderEncoding = System.Text.Encoding.GetEncoding(28591);

    Então ficou assim:

    protected void ImageButtonExcel_Click(object sender, ImageClickEventArgs e)
            {
                medicoes = (List<Medicao>)Session["acudes"];
    
                Response.AddHeader("content-disposition", "attachment; filename=DocumentoExcel.xls");
                Response.Charset = "ISO-8859-1";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding(28591);
                Response.HeaderEncoding = System.Text.Encoding.GetEncoding(28591);
                Response.ContentType = "application/ms-excel";
    
                //Objetos
                StringWriter stringWrite = new System.IO.StringWriter();
                HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    
                //Inclui controles 
                DataGrid dgDados = new DataGrid();
    
                //Definição de cores
                dgDados.HeaderStyle.Font.Bold = true;
                dgDados.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                dgDados.DataSource = criaTabela(medicoes);
                dgDados.DataBind();
    
                //Renderiza o DataGrid
                dgDados.RenderControl(htmlWrite);
    
                //Exporta 
                Response.Write(stringWrite.ToString());
                //encerra
                Response.End();
            }

    Obrigado pela ajuda!

    segunda-feira, 1 de abril de 2013 14:37
  • Que ótimo Rafael, marque a sua reposta como "resposta deste thread" para finalizarmos este thread :D

    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 1 de abril de 2013 14:43