Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael Bosetti

[Resolvido] Importar Dados do Excel para DataGridView

Recommended Posts

Olá, pessoal, segue meu primeiro post no forum com uma dúvida, que talvez interesse a mais alguém.

 

Antes de mais nada, dei uma procurada por aqui e não achei nada a respeito... vamos lá.

 

Tenho uma aplicação em VB 2005 e MS-SQL.

Em certo momento preciso fazer a importação dos dados de uma planilha para um datagridview (dgv_Excel).

Até aí ok! Ele busca as informações, joga no datagridview e depois salva no banco, sem problemas.

 

Só que no banco eu tenho um campo com varchar(2000), mas quando dou um select na tabela, esse campo só tem 255 caracteres.

Verificando deste o início, vi que esse determinado campo no datagridview está buscando do excel só 255 caracteres.

Segue o código para a consulta do excel e joga no datagridview:

 

Public Class fmrImportarExcel
    Private da As OleDbDataAdapter
    Private dt As DataTable
    Private conexao_Excel As String = "Provider=Microsoft.Jet.OleDb.4.0;data source=c:\ATIVIDADES VENDAS.xls;Extended Properties=Excel 8.0;"

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        da = New OleDbDataAdapter("SELECT * FROM [Plan4$]", conexao_Excel)
        dt = New DataTable
        da.Fill(dt)
        dgv_Excel.DataSource = dt.DefaultView
    End Sub
End Class

Tem mais coisas no meu form, mas isso já basta.

Como faço pra um determinado campo do datagridview ter mais de 255 caracteres?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Temos que saber se o problema esta na grid ou quando busca do excel.

Alimente uma variável com este campo quando fizer o select na planilha, ao invés de alimentar uma grid.

Veja se esta trazendo todo o resultado do campo.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi o problema, para caso alguém mais precise, postarei como fazer:

para não ter problemas

cria um combobox com o nome: cbx_Sheets

um datagridview com o nome: dgv_Excel com 2 colunas pra funcionar este exemplo

e uma progressbar com o nome: ProgressBar1

 

Funciona perfeitamente, e pra mim leu os mais de 2000 caracteres que eu precisava, não testei com mais, mas imagino que funcione também

Se alguém tiver alguma dúvida ou sugestão fique a vontade para enviar

 

Public Class frmImportarExcel
    Private nomePlanilha As String 'Armazenarei local do arquivo
    Private xl As New Excel.Application
    Private xlw As Excel.Workbook
    Private xls As Excel.Worksheet

Private Sub Importar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Importar.Click
    Dim item1 As String
    Dim item2 As String
    Dim qtdRegistros As Integer

    OpenFileDialog1.InitialDirectory = "c:\" 'Defino o diretório inicial da localização do arquivo
    OpenFileDialog1.Filter = "xls files (*.xls)|*.xls|All files (*.*)|*.*" 'Defino os formatos de arquivo que quero que seja possível selecionar
    If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 'Solicita o arquivo
        nomePlanilha = OpenFileDialog1.FileName 'Gravo o nome do arquivo, o OpenFileDialog já manda junto todo o diretório onde o arquivo está
    Else
        End Sub 'Termina o procedimento caso o arquivo não seja encontrado ou a janela tenha sido cancelada, senão dará erros
    End If

    xlw = xl.Workbooks.Open(nomePlanilha) 'Abre o arquivo definido

    For Each xls In xlw.Worksheets 'Le todos os nomes das planilhas dentro do .xls
        cbx_Sheets.Items.Add(xls.Name) 'Insiro no meu combobox cada nome encontrado
    Next
    cbx_Sheets.SelectedIndex = 0 'Seleciona o primeiro item do combobox

    xlw.Sheets(cbx_Sheets.SelectedItem).Select() 'Seleciona a planilha escolhida na combobox
    'xlw.Sheets("Plan1").Select() 'Também pode ser usado assim, mas com a combobox fica dinâmico

    'Conta a quantidade de registros e caso alguem queira mostrar uma porcentagem ou usar um ProgressBar
    qtdRegistros = xlw.Application.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row
    ProgressBar1.Maximum = qtdRegistros 'Defino o valor máximo da ProgressBar como sendo o total de registros encontrados para indicar o andamento

    Dim i As Integer
    For i = 2 To qtdRegistros 'No meu caso a planilha usa a primeira linha como nomes dos campos, então inicio minha seleção a partir da linha 2
        System.Windows.Forms.Application.DoEvents() 'Faz o windows continuar processando os eventos do sistema para poder mostrar a barra de progresso em andamento

        item1 = xlw.Application.Cells(i, 1).Value 'Busca o valor da linha na posição i na coluna 1
        item2 = xlw.Application.Cells(i, 2).Value 'Busca o valor da linha na posição i na coluna 2
        dgv_Excel.Rows.Add(item1, item2) 'Insere os valores no datagridview dgv_Excel, não esquecendo que as colunas já tem que ser existentes, senão dará erro

        If Not ProgressBar1.Value = ProgressBar1.Maximum Then 'Verifica se não é o último item da lista
            ProgressBar1.Value += 1 'Faz a ProgressBar avançar uma casa se já não estiver chegado ao valor máximo que seria a variável qtdRegistros
        End If
    Next 'Vai para a próxima linha

    xlw.Close(False) 'Fecha o arquivo .xls sem salvar nada
End Sub
End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.