Pegar todas as linhas preenchidas numa planilha
07/10/2008
0
Gostaria de saber como faz um loop para pegar todas as linhas preenchidas de uma respectiva coluna de uma planilha em excel e armazenar numa listbox. Exemplo:
A
João
Pedro
Maria
Quero percorrer toda a coluna A para pegar os nomes.
Alguma sugestão?
Obrigado
Ediberto
Edibertoalves
Posts
07/10/2008
Ricardo Silva
e jogar na memoria... num DataReader, DataTable ou ateh mesmo num objeto seu....
explica melhor ai...
08/10/2008
Codename.v
Segue um código simples e comentado de como fazer isso.
/* String que guarda as informações da conexão. O campo dbq representa o arquivo do Excel a ser utilizado, o campo defaultdir representa o diretório em que encontra-se o arquivo, etc... =P */ String connectionString = @"Dsn=Excel Files;" + "dbq=Pasta1.xlsx;" + "defaultdir=c:\\;" + "driverid=1046;" + "maxbuffersize=2048;" + "pagetimeout=5"; /* Aqui você estancia um objeto da classe OdbcConnection passando a string de conexão como parâmetroe em seguida utiliza o método Open() da mesma classe para abrir a conexão ODBC. */ OdbcConnection odbcConnection = new OdbcConnection(connectionString); odbcConnection.Open(); /* É criado e estanciado agora um objeto da classe OdbcDataAdapter passando como parâmetros um comando SQL e o objeto da classe OdbcConnection que ja encontra-se aberto. Obs.: [Plan1$] diz respeito à planilha do seu arquivo. */ OdbcDataAdapter odbcDataAdapter = new OdbcDataAdapter("select * from [Plan1$]", odbcConnection); /* Cria-se agora um DataSet e utiliza-se o objeto da classe OdbcDataAdapter para preenche-lo com todo o conteúdo do arquivo. Em seguida o método Close() da classe OdbcConnection é chamado para fechar a conexão. */ DataSet ds = new DataSet(); odbcDataAdapter.Fill(ds); odbcConnection.Close(); /* Aqui temos um loop foreach simples que utiliza os dados do DataSet para preencher um controle ListBox. */ foreach (DataRow dataRow in ds.Tables[0].Rows) { listBox1.Items.Add(dataRow["A"].ToString()); }
É isso... Você pode modificar este código e coloca-lo em classes diferentes para torná-lo reutilizável, ou pode escrever ele no evento Load do seu Formulário.
Obs.: Não se esqueça de declarar o ´using System.Data.Odbc´ no começo do seu código.
Abraços!
09/10/2008
Edibertoalves
Muito legal o seu código!!!
Implementei e funcionou legal!
Agora uma outra dúvida....
Como faria para pegar somente o cabeçalho???.
Por exemplo:
A
Codigo <= Este é o cabeçalho
01
02
03
Aí no listbox ou em um treeview eu exibiria assim:
Codigo
01
02
03
Obrigado!
Ediberto
09/10/2008
Edibertoalves
ArrayList vListaCabecalho = new ArrayList(); string vConnString = @"Dsn=Excel Files;dbq="+txtArquivo.Text+";driverid=1046;maxbuffersize=2048;pagetimeout=5;"; System.Data.Odbc.OdbcConnection vConnection = new System.Data.Odbc.OdbcConnection(vConnString); vConnection.Open(); System.Data.Odbc.OdbcDataAdapter vDataAdapter = new System.Data.Odbc.OdbcDataAdapter("select * from [" + CapturarNomePlanilha() + "]", vConnection); System.Data.DataTable vDataTable = new System.Data.DataTable(); vDataAdapter.Fill(vDataTable); vConnection.Close(); vConnection.Dispose(); for (int i = 0; i <= vDataTable.Columns.Count -1; i++) { vListaCabecalho.Add(vDataTable.Columns[i].ToString()); }
a função CapturarNomePlanilha serve justamente para pegar o nome da primeira planilha com o qual deseja trabalhar.
Obrigado
Ediberto
Clique aqui para fazer login e interagir na Comunidade :)