VB .NET - Exportando dados de um DataGridView para o Excel (revisão)


 Neste tutorial vamos rever como podemos exportar dados a partir de um controle DataGridView para uma planilha Excel usando a linguagem VB .NET.

Os recursos usados no projeto deste artigo foram:

Criando o projeto no VS 2015 Community

Abra o VS 2015 Community e crie um novo projeto (File-> New Project) com o nome Exportar_Excel usando o template Windows Forms Application;

No formulário form1.vb inclua os seguintes controles:

Disponha os controles no formulário conforme o leiaute abaixo:

No menu PROJECT clique em Add Reference e inclua uma referência ao Microsoft Excel conforme a seguir:

Após isso defina o seguinte namespace no formulário:

Imports Microsoft.Office.Interop

A seguir inclua o código no início do formulário que cria um objeto que representa a aplicação Excel:

Dim XcelApp As New Excel.Application()

A primeira tarefa será preencher o controle DataGridView com dados e podemos fazer isso de diversas formas : importar de um arquivo XML, carregar a partir de um banco de dados, de um arquivo texto, etc.

A mais simples é criar um DataTable, definir alguns dados e exibi-los no DataGridView.

Para isso vamos criar uma rotina chamada CarregaGrid() com o seguinte código:

 Private Sub carregaGrid()
        Try
            Dim dt As New DataTable
            dt.Columns.Add("Codigo", GetType(Integer))
            dt.Columns.Add("Nome", GetType(String))
            dt.Columns.Add("Admissao", GetType(DateTime))
            dt.Columns.Add("Setor", GetType(Integer))
            dt.Columns.Add("Salario", GetType(Double))
            Dim dr As DataRow = dt.NewRow()
            dr("Codigo") = 1
            dr("Nome") = "Macoratti"
            dr("Admissao") = DateTime.Now
            dr("Setor") = 20
            dr("Salario") = 15000
            dt.Rows.Add(dr)
            dr = dt.NewRow()
            dr("Codigo") = 2
            dr("Nome") = "Miriam"
            dr("Admissao") = DateTime.Now
            dr("Setor") = 30
            dr("Salario") = 25000
            dt.Rows.Add(dr)
            dr = dt.NewRow()
            dr("Codigo") = 3
            dr("Nome") = "Jefferson"
            dr("Admissao") = DateTime.Now
            dr("Setor") = 40
            dr("Salario") = 18000
            dt.Rows.Add(dr)
            dgvDados.DataSource = dt
        Catch ex As Exception
            MessageBox.Show("Erro " + ex.Message)
   End Try
End Sub

A rotina acima será chamada no evento Load do formulário :

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        carregaGrid()
End Sub

No evento Click do botão -  Exportar para o Excel >> - temos o código onde percorremos cada linha e célula do DataGridView e exportando para o Excel:

 Private Sub btnExportar_Click(sender As Object, e As EventArgs) Handles btnExportar.Click
        If dgvDados.Rows.Count > 0 Then
            Try
                XcelApp.Application.Workbooks.Add(Type.Missing)
                For i As Integer = 1 To dgvDados.Columns.Count
                    XcelApp.Cells(1, i) = dgvDados.Columns(i - 1).HeaderText
                Next
                '
                For i As Integer = 0 To dgvDados.Rows.Count - 2
                    For j As Integer = 0 To dgvDados.Columns.Count - 1
                        XcelApp.Cells(i + 2, j + 1) = dgvDados.Rows(i).Cells(j).Value.ToString()
                    Next
                Next
                '
                XcelApp.Columns.AutoFit()
                '
                XcelApp.Visible = True
            Catch ex As Exception
                MessageBox.Show("Erro : " + ex.Message)
                XcelApp.Quit()
            End Try
        End If
End Sub

A seguir vemos os dados do DataGridView :

E a seguir o resultado final do processamento após a exportação para o Excel:

Para concluir inclua no evento Click do botão Encerrar o código que fecha o Excel e encerra a aplicação:

 Private Sub btnEncerrar_Click(sender As Object, e As EventArgs) Handles btnEncerrar.Click
        XcelApp.Quit()
        XcelApp = Nothing
        Me.Close()
    End Sub

Simples, prático e útil...

Pegue projeto completo aqui : Exportar_Excel.zip

E disse-lhe Jesus: Eu vim a este mundo para juízo, a fim de que os que não vêem vejam, e os que vêem sejam cegos.
João 9:39

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti