• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skcratch

[Resolvido] - Exportar DataTable para Excel

6 mensagens neste tópico

Viva!

Aquilo que pretendo fazer é exportar uma DataTable para um ficheiro Excel. O código que tenho até ao momento é apresentado a seguir:

private void ExportToSpreadsheet(DataTable table, string name)
    {
        HttpContext context = HttpContext.Current;
        context.Response.Clear();
        foreach (DataColumn column in table.Columns)
        {
            context.Response.Write(column.ColumnName + ";");
        }
        context.Response.Write(Environment.NewLine);
        foreach (DataRow row in table.Rows)
        {
            for (int i = 0; i < table.Columns.Count; i++)
            {
                context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";");
            }
            context.Response.Write(Environment.NewLine);
        }

        context.Response.ContentType = "text/csv";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".csv");
        context.Response.End();
    }

A DataTable que é passada como parâmetro do método está a ser preenchida através de uma stored procedure. O problema está no encoding do ficheiro gerado já que a acentuação, por exemplo, não está a ser apresentada. De notar que os registos na base de dados possuem o encoding na forma correcta.

Grato desde já pela ajuda,

Cumps!

:thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("Windows-1252");
context.Response.Charset = "UTF-8";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Neste momento, tenho o seguinte código:

private void ExportToSpreadsheet(DataTable table, string name)
    {
        HttpContext context = HttpContext.Current;
        context.Response.Clear();
        foreach (DataColumn column in table.Columns)
        {
            context.Response.Write(column.ColumnName + ";");
        }
        context.Response.Write(Environment.NewLine);
        foreach (DataRow row in table.Rows)
        {
            for (int i = 0; i < table.Columns.Count; i++)
            {
                context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";");
            }
            context.Response.Write(Environment.NewLine);
        }
        
        context.Response.ContentEncoding = Encoding.GetEncoding("Windows-1252");
        context.Response.Charset = "UTF-8";
        context.Response.ContentType = "text/csv";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".csv");
        context.Response.End();
    }

Já apliquei aquilo que foi sugerido pelo inginheiiro mas continua sem funcionar. Mais alguma sugestão?

Grato desde já pela ajuda,

Cumps!

:thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


private void ExportToSpreadsheet(DataTable table, string name)
    {
        HttpContext context = HttpContext.Current;
        context.Response.Clear();

        context.Response.ContentEncoding = Encoding.GetEncoding("Windows-1252");
        context.Response.Charset = "UTF-8";
        context.Response.ContentType = "text/csv";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".csv");

        foreach (DataColumn column in table.Columns)
        {
            context.Response.Write(column.ColumnName + ";");
        }
        context.Response.Write(Environment.NewLine);
        foreach (DataRow row in table.Rows)
        {
            for (int i = 0; i < table.Columns.Count; i++)
            {
                context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";");
            }
            context.Response.Write(Environment.NewLine);
        }
        
        context.Response.End();
    }

tenta mudar a sequência do codigo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Antes demais, muito obrigado pela ajuda; o encoding ficou a funcionar na perfeição. Agora apenas tenho um pequeno problema ao nível da formatação do ficheiro Excel gerado. Será que alguém me pode indicar como posso retirar as mudanças de linha e tabulações de todas as colunas presentes na DataTable? Creio que são esses "elementos" que estão a desformatar o ficheiro.

Grato desde já pela ajuda,

Cumps!

:thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora