Fórum Ler (importar) dados de arquivo excel usando filtro #383273
10/08/2010
0
@"Data Source=" + arquivoExcel + ";" +
"Extended Properties='Excel 12.0;HDR=YES;'"; string sql = "SELECT * FROM [" + regiao + " " + mesImportacao + "$]"; DataTable vendasCorrentes = new DataTable();
using (OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connectionString))
{
adapter.Fill(vendasCorrentes);
} O select funciona, só que ele me traz todas as linhas do Excel, o que acarreta em mais tempo de processamento (para ele ler tudo isso). Eu recebo essa planilha do cliente, não tem nada na primeira linha para eu usar como cabeçalho de coluna (vem na formatação deles), e eu gostaria de saber se no SELECT do Excel tem como eu usar uma condição do tipo: WHERE B <> '' ou WHERE ISNULL(B, '') <> ''. B no caso seria a segunda coluna do arquivo excel. Com isso, minha intenção é de, ao invés de ele levar um tempo maior para trazer 60.000 linha, ele me traga só 40 linhas, que eu sei que são válidas para eu importar, e com isso, diminuo esse tempo de processamento no momento da leitura, sabe? Fico no aguardo, valeu!
Carlos Nogueira
Curtir tópico
+ 0Posts
10/08/2010
Luiz Maia
' obtem a tabela vinculada ao datagrid
Dim dt As DataTable = CType(dgLocalizaLinhas.DataSource, DataView).Table ' constroi o filtro usando o conteudo do combobox
Dim filtro As [String] = CAMPO_SHIPCOUNTRY & " = '" & cboPais.Text & "'" ' localiza os registros usando o método select do datatable
Dim drc As DataRow() = dt.Select(filtro)
txtResultado.Text = "DataTable.Select retornou " & drc.Length & " registros(s)." & Environment.NewLine ' percorre a coleção de linhas filtradas no passo anterior e localiza o item
'na tabela usando o método Find() de DataRowCollection do DataTable
Dim contador As Integer = 0
Dim linha As DataRow For Each linha In drc
Dim RegistroLocalizado As DataRow = dt.Rows.Find(linha(CAMPO_ORDERID))
If Not (RegistroLocalizado Is Nothing) Then
contador = contador + 1
End If
Next linha txtResultado.Text = txtResultado.Text & "DataTable.Rows.Find retornou " & contador & " registros(s)." & Environment.NewLine ' localiza os registros usando a propriedade RowFilter do DataView
Dim dv As New DataView(dt) 'executa o filtro no dataview
dv.RowFilter = filtro 'vincula o resultado ao dtagrid
dgLocalizaLinhas.DataSource = dv 'exibe o resultado dos três métodos usados para retornar os registros com o criterio usado
txtResultado.Text = txtResultado.Text & "DataView.RowFilter retornou " & dv.Count & " registro(s)." End Sub Destacamos a seguir as linhas de código que usam os métodos indicados : O filtro usado é obtido usando o nome do país selecionado na combobox pelo usuário : Dim filtro As [String] = CAMPO_SHIPCOUNTRY & " = '" & cboPais.Text & "'" Dim drc As DataRow() = dt.Select(filtro) Dim RegistroLocalizado As DataRow = dt.Rows.Find(linha(CAMPO_ORDERID)) dv.RowFilter = filtro
Gostei + 0
10/08/2010
Carlos Nogueira
Gostei + 0
10/08/2010
Luiz Maia
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)