C# - Exportando os dados de uma tabela para o formato Excel (xls)
Exportar os dados de uma tabela para o formato Excel pode ser uma tarefa complicada para quem nunca fez isso antes.
Neste artigo eu mostro que usando C# esta tarefa é relativamente simples mesmo para os iniciantes.
Recursos que iremos usar:
Nosso objetivo será acessar os dados da tabela Products do banco de dados Northwind e gerar um arquivo .xls para em seguida abrir este arquivo no Excel ou um editor compatível como o Open Office.
Eu vou deixar no projeto o código para acessar tanto o Microsoft Access como o SQL Server Express 2005 Express Edition.
Abra o Visual C# e selecione a opção Create Project e a seguir selecione o template Visual C# -> Windows Forms Application e informe o nome exportaDB;
A seguir no formulário principal inclua os seguintes componentes a partir da ToolBox:
Defina os controles conforme o leiaute abaixo;
Defina os seguintes namespaces no projeto:
using
System.IO;A seguir vejamos o código do evento Click do botão - Gerar arquivos para o Excel :
void BtnExportarClick(object sender, EventArgs e) {
string
caminho = txtNomeArquivoXLS.Text; if(cboSGBD.SelectedIndex == 0) { // criar um arquivo para escrever using (StreamWriter sw = File.CreateText(caminho)) { //Monta a string de conexão para MS Access com os dados do formulário String conn = @"provider=Microsoft.Jet.OLEDB.4.0;data source = c:\dados\ " + txtBD.Text + ".mdb"; OleDbConnection cn = new OleDbConnection(conn); OleDbCommand cmd = new OleDbCommand("SELECT * FROM " + txtTabela.Text, cn); try { cn.Open(); OleDbDataReader dr = cmd.ExecuteReader(); // percorre o datareader e escreve os dados no arquivo .xls definido while (dr.Read()) { sw.WriteLine(dr[ "ProductName"].ToString() + "\t" + dr["UnitPrice"].ToString());} //exibe mensagem ao usuario MessageBox.Show("Arquivo " + caminho + " gerado com sucesso."); } catch (Exception excpt) { MessageBox.Show(excpt.Message); } } } else { // criar um arquivo para escrever using (StreamWriter sw = File.CreateText(caminho)) { //Server=myServerName\theInstanceName;Database=myDataBase;Trusted_Connection=True; //Monta a string de conexão para SQL Server com os dados do formulário string conn = @"Server = " + txtServidor.Text; conn = conn + "; Database = " + txtBD.Text; conn = conn + "; Trusted_Connection=True"; SqlConnection cn = new SqlConnection(conn); //define a instrução SQL para executar contra o banco de dados string sql = " Select * from " + txtTabela.Text; SqlCommand cmd = new SqlCommand(sql, cn); try { //abre a conexão e gera o datareader cn.Open(); SqlDataReader dr = cmd.ExecuteReader(); // percorre o datareader e escreve os dados no arquivo .xls definido while (dr.Read()) { sw.WriteLine(dr[ "ProductName"].ToString() + "\t" + dr["UnitsInStock"].ToString() + "\t" + dr["UnitPrice"].ToString());} //exibe mensagem ao usuario MessageBox.Show("Arquivo " + caminho + " gerado com sucesso."); } catch (Exception excpt) { MessageBox.Show(excpt.Message); } } } } |
O código usado para gerar o arquivo XLS usando o MS Access ou o SQL Server são praticamente iguais, a única mudança é a string de conexão e a utilização dos provedores para cada um dos banco de dados:
O serviço é realmente feito usando o recurso do namespace System.IO, a classe StreamWriter: : using (StreamWriter sw = File.CreateText(caminho))
O C# usa a classe Stream para ler
e escrever em arquivos. A classe StreamWriter implementa um
TextWriter para a escrita de caracteres em um fluxo de bytes(stream)
usando uma determinada codificação. |
para criar o arquivo e o método Writeline para escrever no arquivo : sw.WriteLine(dr["ProductName"].ToString() + "\t" + dr["UnitPrice"].ToString());
Para controlarmos a seleção do controle Combobox - cboSGBD - usamos o seguinte código:
1- Para definir a seleção inicial do combobox como sendo a primeira opção:
void MainFormLoad(object
sender, EventArgs
e) { cboSGBD.SelectedIndex = 0 ; } |
2- Para verificar se houve alteração na seleção da combobox usando o evento SelectedIndexChanged:
void
ComboBox1SelectedIndexChanged(object
sender, EventArgs
e) { if (cboSGBD.SelectedItem.Equals("SQL Server Express" )) pnlSGBD.Visible=true; else pnlSGBD.Visible=false; } |
Para abrir o arquivo XLS gerado incluímos o seguinte código no evento Click do botão - Abrir arquivo XLS gerado:
private
void
btnAbrirXLS_Click_1(object
sender, EventArgs
e)
{ string arqExcel = txtNomeArquivoXLS.Text;
if (arqExcel != "") { try { System.Diagnostics. Process proc = new System.Diagnostics.Process();proc.EnableRaisingEvents = true;proc.StartInfo.FileName = arqExcel; proc.Start(); } catch (DirectoryNotFoundException) { MessageBox.Show("Diretório não encontrado !"); } catch (FileNotFoundException) { MessageBox.Show("Arquivo não encontrado !"); } catch (System.IO.IOException) { MessageBox.Show("Arquivo não esta disponível. Pode estar em uso."); } catch (Exception ex) { MessageBox.Show("Houve um problema ao abrir o arquivo :" + ex.Message.ToString()); } } else{ MessageBox.Show("Informe a localização do arquivo Excel."); } } |
Executando o projeto iremos obter:
Abrindo o arquivo XLS teremos:
Como você viu não é tão complicado como parece gerar arquivos no formato Excel. Existem outras formas de fazer isso na plataforma .NET. Uma dica rápida para abrir um arquivo XLS e exibir em um datagridview seria incluir mais um controle Button - btnAbrirExcel, e um controle DataGRidView - gdvExcel, e no seu evento Click do Button incluir o seguinte código:
private
void
btnAbrirExcel_Click_1(object
sender, EventArgs
e)
{ arqExcel.InitialDirectory = "c:\\dados";arqExcel.Filter = "*.xls | *.* Microsoft Excel";arqExcel.Title = "Selecione o Arquivo";if (arqExcel.ShowDialog() == DialogResult.OK) { DataSet ds = new DataSet(); OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + arqExcel.FileName + ";Extended Properties=Excel 8.0;");
OleDbDataAdapter da = new OleDbDataAdapter("Select * From [Plan1$]", conexao); da.Fill(ds); gdvExcel.DataSource = ds.Tables[0]; gdvExcel.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader; conexao.Close(); } } |
Será aberto uma caixa de diálogo Abrir arquivo já apontando para o caminho c:\dados e apos selecionar o arquivo XLS o mesmo será exibido no DataGridView- gdvExcel;
Aguarde novos artigos sobre o assunto...
Pegue o projeto completo aqui : exportaDB.zip
Eu sei é apenas C#, mas eu gosto...
Referências:
José Carlos Macoratti