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: