Array
(
)

Pegar todas as linhas preenchidas numa planilha

Edibertoalves
   - 07 out 2008

olá Pessoal!
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

Ricardo Silva
   - 07 out 2008

cara é soh fazer uma conexão OBDC no arquivo .xml
e jogar na memoria... num DataReader, DataTable ou ateh mesmo num objeto seu....

explica melhor ai...

Codename.v
   - 08 out 2008

É isso mesmo. Como o amigo RicaJedidia disse na resposta acima, você vai precisar estabelecer uma conexão ODBC com sua base de dados Excel.

Segue um código simples e comentado de como fazer isso.

#Código

/*
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!

Edibertoalves
   - 09 out 2008

Olá!
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

Edibertoalves
   - 09 out 2008

Consegui de uma forma, resgatar somente o cabeçalho, e adaptando um pouco sua lógica:
#Código

                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