C#
- Lendo, Incluindo e Atualizado dados de uma planilha Excel
Hoje vamos ler, incluir e atualizar dados de uma planilha Excel 2007.
A partir da versão 2007 houve alterações na forma de acessar um banco de dados MS Access com os aplicativos Office.
A primeira coisa que você deve fazer é baixar e instalar o novo provedor de acesso a dados que deverá ser usado no lugar do Jet a partir deste link: 2007 Office System Driver: Data Connectivity Components
Nas versões anteriores utilizava-se o Microsoft Jet e a string de conexão usada pode ser vista no trecho de código abaixo:
| Set conn = New ADODB.Connection With conn .Provider = "Microsoft.JET.OLEDB.4.0" .ConnectionString = "Data Source=" & caminhoArquivoDados; .Open End With |
Na versão 2007 o mesmo trecho de código, agora usando o novo provedor, ficaria assim :
| Set conn = New ADODB.Connection With conn .Provider = "Provider=Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & caminhoArquivoDados; .Open End With |
Além destas houve outras alterações como:
- Para abrir um arquivo Excel com linha de cabeçalho: Data Source =c:\ExcelArq.xlsx;HDR=yes;Format=xlsx;
- Para abrir um arquivo Excel sem linha de cabeçalho: Data Source =c:\ExcelArq.xlsx;HDR=no;Format=xlsx;
Quanto aos tipos de arquivos Excel 2007 temos as seguintes definições:
O arquivo excel pode ser tratado como texto definindo o flag: IMEX=1 na final da string de conexão:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\dados\Excel2007Arq.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
Enfim, a mudança não foi tão grande assim...
Lendo, Incluindo e Atualizando dados de uma planilha Excel 2007
Nosso objetivo será atualizar os dados de uma planilha Excel 2007.
Pode ser qualquer planilha e eu vou usar uma planilha bem simples chamada Empregados.xlsx que pode ser vista na figura abaixo. Portanto você deve criar uma pasta de trabalho com o nome Empregados.xlsx e criar a planilha que contém o código e o nome de funcionários:
![]() |
A pasta de trabalho Empregados.xlsx vai ser colocada na pasta c:\dados\Excel (mas você pode colocar em qualquer lugar bastando ajustar a variável que contém o caminho do arquivo)
Atualizar a planilha diretamente no Excel é muito simples o que desejamos e criar uma aplicação usando a linguagem C#.
Para isso eu vou usar os conceitos de conexão e acesso a planilha introduzidos no início deste artigo.
Vamos criar uma nova aplicação no Visual C# 2010 Express Edition do tipo Windows Forms Applicaton e dar a ela o nome de Excel;
A seguir vamos incluir no formulário form1.cs do projeto os seguintes controles:
O leiaute do formulário deverá estar conforme a figura abaixo:
![]() |
Vamos definir no início do formulário form1.cs os seguintes namespaces:
using
System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;
A seguir defina as variáveis para conexão ,comando e a string de conexão e consulta:
private OleDbConnection
_olecon;
private OleDbCommand _oleCmd;
private static String _Arquivo = @"C:\dados\Excel\Empregados.xlsx";
private String _StringConexao = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data
Source={0};Extended Properties='Excel 12.0
Xml;HDR=YES;ReadOnly=False';", _Arquivo);
private String _Consulta;
Definindo o código dos eventos dos controles do formulário
No evento Load do formulário Excel defina o código
private void FormExcel_Load(object sender, EventArgs e)
{
try
{
_olecon = new OleDbConnection(_StringConexao);
_olecon.Open();
_oleCmd = new OleDbCommand();
_oleCmd.Connection = _olecon;
_oleCmd.CommandType = CommandType.Text;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
No evento Click do botão btnProcurar inclua o código abaixo:
private void btnProcurar_Click(object sender, EventArgs e)
{
try
{
_oleCmd.CommandText = "SELECT CodFunci, NomeFunci FROM [Empregados$] Where CodFunci = " + txtCodigoFunci.Text;
OleDbDataReader reader = _oleCmd.ExecuteReader();
while (reader.Read())
{
txtCodigoFunci.Text = reader.GetValue(0).ToString();
txtNomeFunci.Text = reader.GetString(1);
}
reader.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
No evento Click do botão Novo inclua o código a seguir:
private void btnNovo_Click(object sender, EventArgs e)
{
_Consulta = "INSERT INTO [Empregados$] ";
_Consulta += "([CodFunci],[NomeFunci]) ";
_Consulta += "VALUES ";
_Consulta += "(@CodFunci,@NomeFunci)";
_oleCmd.CommandText = _Consulta;
_oleCmd.Parameters.Add("@CodFunci", OleDbType.Integer).Value = Convert.ToInt32(txtCodigoFunci.Text);
_oleCmd.Parameters.Add("@NomeFunci", OleDbType.VarChar, 255).Value = txtNomeFunci.Text.Trim();
_oleCmd.ExecuteNonQuery();
_oleCmd.Parameters.Clear();
txtCodigoFunci.ResetText();
txtNomeFunci.ResetText();
MessageBox.Show("Dados Incluídos...");
}
|
No evento Click do botão Atualizar defina o código
private void btnAtualizar_Click(object sender, EventArgs e)
{
try
{
_Consulta = "UPDATE [Empregados$] ";
_Consulta += "SET [NomeFunci] = @NomeFunci ";
_Consulta += "WHERE ";
_Consulta += "[CodFunci] = @CodFunci";
_oleCmd.CommandText = _Consulta;
_oleCmd.Parameters.Add("@NomeFunci", OleDbType.VarChar, 255).Value = txtNomeFunci.Text.Trim();
_oleCmd.Parameters.Add("@CodFunci", OleDbType.Integer).Value = Convert.ToInt32(txtCodigoFunci.Text);
_oleCmd.ExecuteNonQuery();
_oleCmd.Parameters.Clear();
txtCodigoFunci.ResetText();
txtNomeFunci.ResetText();
MessageBox.Show("Dados Atualizados....");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
|
No evento FormClosing do formulário Excel defina o código a seguir:
private void FormExcel_FormClosing(object sender, FormClosingEventArgs e)
{
if (_oleCmd != null)
{
_oleCmd.Parameters.Clear();
_oleCmd.Dispose();
}
_oleCmd = null;
if (_olecon != null)
{
if (_olecon.State == ConnectionState.Open)
_olecon.Close();
_olecon.Dispose();
}
_olecon = null;
}
|
Executando o projeto temos a exibição dos dados da planilha e da seleção de um dado pelo código:
![]() |
A seguir temos a atualização feita e salva na planilha Excel:
![]() |
Pegue o projeto completo
aqui:
Excel_CSharp.zip
Slm 127:1
Se o Senhor não edificar a casa, em vão trabalham os que a edificam; se o Senhor não guardar a cidade, em vão vigia a sentinela.Slm 127:2
Inútil vos será levantar de madrugada, repousar tarde, comer o pão de dores, pois ele supre aos seus amados enquanto dormem.Slm 127:3
Eis que os filhos são herança da parte do Senhor, e o fruto do ventre o seu galardão.Slm 127:4
Como flechas na mão dum homem valente, assim os filhos da mocidade.Slm 127:5
Bem-aventurado o homem que enche deles a sua aljava; não serão confundidos, quando falarem com os seus inimigos à porta.Referências: