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: