Ir para o conteúdo

Copiar dados do Excel para DataGridView

A DataGridView já tem a possibilidade de permitir copiar os seus dados e colar noutra aplicação. A propriedade que permite isto é a ClipboardCopyMode, que por defeito está seleccionada para EnableWithAutoHeaderText. No entanto o inverso não está previsto.

Para adicionar esta possibilidade à DataGridView é necessário ler a classe Clipboard através da sua função GetText(). Deste modo consegue-se ler o que está no Clipboard e colocar na DataGridView.

Este exemplo, que mostra como implementar esta funcionalidade, utiliza uma DataGridView sem estar vinculada a dados e utiliza a combinação de teclas Ctrl+V para colar os dados. Verifica ainda se o número de colunas copiadas é igual ao número de colunas existentes.

Exemplo

   ' No evento KeyDown da DataGridView
    Private Sub DataGridView1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown

        ' Caso as teclas pressinadas sejam CTRL+V
        If e.Control AndAlso e.KeyCode = Keys.V Then

             Try

                ' Ciclo nas linhas copiadas
                For Each line As String In Clipboard.GetText.Split(vbNewLine)

                    ' Separa as colunas referentes à linha actual
                    Dim item() As String = line.Trim.Split(vbTab)

                    ' Se o número de colunas for diferente mostra uma mensagem de erro
                    If item.Length <> Me.DataGridView1.ColumnCount Then
                        Dim str As String = "O número de colunas copiadas é diferente" & _
                                        " do número de colunas da DataGridView"
                        Throw New Exception(str)
                    End If

                    ' Adicionar a linha a DataGridView
                    Me.DataGridView1.Rows.Add(item)
                Next

            Catch ex As Exception
                ' Mensagem de erro caso exista
                MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try

        End If

    End Sub