C# - Gerando um Documento Excel a partir de um DataTable
Vejamos o seguinte cenário clássico :
Você precisa gerar documentos no formato Excel a partir das tabelas do seu banco de dados.
É uma tarefa elementar e eu já tratei deste assunto em diversos artigos mas como saber não ocupa espaço vamos a mais uma maneira de resolver o problema.
Neste artigo eu mostro como gerar documentos Excel a partir de um DataTable de um banco de dados Excel usando a linguagem C#.
Eu poderia criar uma aplicação Windows Forms ou WPF mas vou criar uma aplicação Web usando o Visual Web Developer(VWD) 2008 Express.
Abra o VWD 2008 Express e no menu File selecione New Web Site e selecione o template ASP .NET Web Site informando o nome ExportaDados e selecionando a linguagem C#;
A seguir selecione o arquivo Default.aspx e no modo Design inclua uma tabela com 6 linhas e 2 colunas e defina o leiaute da figura abaixo no web form;
Neste formulário o usuário informa o local do banco de dados , no servidor, o nome do banco de dados e o comando SQL que será executado para gerar o DataTable.
protected void btnGeraDocumento_Click(object sender, EventArgs e) { //Conteúdo do Response Response.AddHeader("content-disposition", "attachment; filename=DocumentoExcel.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.xls"; //Objetos StringWriter stringWrite = new System.IO.StringWriter(); HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); //Inclui controles DataGrid dgDados = new DataGrid(); this.form1.Controls.Add( dgDados); //Definição de cores //dgRecord.HeaderStyle.BackColor = System.Drawing.Color.Yellow; dgDados.DataSource = pegaTabela(); dgDados.DataBind(); //definição das cores das células //foreach (DataGridItem dgi in dgRecord.Items) // foreach (TableCell tcGridCells in dgi.Cells) // tcGridCells.Attributes.Add("class", "sborder"); //Renderiza o DataGrid dgDados.RenderControl(htmlWrite); //Inluir a classe de estilo //Response.Write(@"<style> .sborder { color : Red;border : 1px Solid Balck; } </style> "); //Exporta Response.Write(stringWrite.ToString()); //encerra Response.End(); } |
A rotina pegaTabela acessa o banco de dados usando o provedor OLEDB e obtém os dados da tabela retornando um DataTable;
protected DataTable pegaTabela() { string conString = @"Provider=Microsoft.JET.OLEDB.4.0;data source=" + txtLocalBD.Text + txtNomeBD.Text; // cria e abre uma conexão OleDbConnection conn = new OleDbConnection(conString); conn.Open(); DataTable dt = new DataTable(); // cria um adapter e preenche o datatable OleDbDataAdapter adapter = new OleDbDataAdapter(txtComandoSQL.Text, conn); adapter.Fill(dt); // fecha a conexão conn.Close(); return dt; } |
Se você desejar criar o seu próprio DataTable e preencher com dados pode usar a rotina abaixo:
protected DataTable criaTabela() { //Cria um datatable temporario para vincular valores DataTable dtTemp = new DataTable(); DataRow dr; //cria o schema dtTemp.Columns.Add("Codigo"); dtTemp.Columns.Add("Nome"); //Imclui dados dr = dtTemp.NewRow(); dr["Codigo"] = "1"; dr["Nome"] = "Macoratti"; dtTemp.Rows.Add(dr); dr = dtTemp.NewRow(); dr["Codigo"] = "2"; dr["Nome"] = "Miriam"; dtTemp.Rows.Add(dr); dr = dtTemp.NewRow(); dr["Codigo"] = "3"; dr["Nome"] = "Jessica"; dtTemp.Rows.Add(dr); dr = dtTemp.NewRow(); dr["Codigo"] = "4"; dr["Nome"] = "Jefferson"; dtTemp.Rows.Add(dr); dr = dtTemp.NewRow(); dr["Codigo"] = "5"; dr["Nome"] = "Janice"; dtTemp.Rows.Add(dr); //retorna o datatable return dtTemp; } |
Executando o projeto , ao clicar no botão para gerar o documento veremos a janela de diálogo para abrir o documento ou salvar.
Abrindo o documento no OpenOffice (eu criei o projeto em uma máquina que não tinha o Excel) veremos a tabela exibida conforme abaixo:
Pegue o projeto completo aqui: ExportaDados.zip
Aguarde mais artigos sobre C#.
Eu sei é apenas C# mas eu gosto...
Referências: