Jump to content
diego_10

Exportar Datagrid para Excel

Recommended Posts

diego_10

Boas,

Tive a pesquisar na net como se conseguia exportar uma datagrid para um documento excel e esse problema esta resolvido com este codigo :

http://vbtuga.blogspot.com/2008/05/vbnet-exportar-datagridview-para-excel.html

A minha duvida é esta, quando ele passa a datagrid envia todas as colunas visiveis e invisiveis, será que nao consigo enviar para o excel apenas o que esta visivel na datagrid?

Cumprimentos a todos!

Share this post


Link to post
Share on other sites
Caça

Claro, só tens de verificar se a coluna é visível, caso não seja, não passas.

Se tiveres duvidas mostra o código que tens


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
diego_10

  Enum xlsOption

        xlsSaveAS

        xlsOpen

    End Enum

    Public Sub ExportToExcel(ByVal dgvproducao As DataGridView, ByVal [option] As xlsOption, Optional ByVal fileName As String = "")

        Dim objExcelApp As New Excel.Application()

        Dim objExcelBook As Excel.Workbook

        Dim objExcelSheet As Excel.Worksheet

        Try

            ' Se foi seleccionada a opção xlsSaveAs e não foi indicado ficheiro

            If [option] = xlsOption.xlsSaveAS And fileName = String.Empty Then

                MessageBox.Show("É necessário indicar um nome para o ficheiro")

                Exit Sub

            End If

            ' Altera o tipo/localização para Inglês. Existe incompatibilidade 

            ' entre algumas versões de Excel vs Sistema Operativo

            Dim oldCI As CultureInfo = CurrentThread.CurrentCulture

            CurrentThread.CurrentCulture = New CultureInfo("en-US")

            ' Adiciona um workbook e activa a worksheet actual

            objExcelBook = objExcelApp.Workbooks.Add

            objExcelSheet = CType(objExcelBook.Worksheets(1), Excel.Worksheet)

            ' Ciclo nos cabeçalhos para escrever os títulos a bold/negrito

            Dim dgvColumnIndex As Int16 = 1

            For Each col As DataGridViewColumn In dgvproducao.Columns

                objExcelSheet.Cells(1, dgvColumnIndex) = col.HeaderText

                objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True

                dgvColumnIndex += 1

            Next

            ' Ciclo nas linhas/células

            Dim dgvRowIndex As Integer = 2

            For Each row As DataGridViewRow In dgvproducao.Rows

                Dim dgvCellIndex As Integer = 1

                For Each cell As DataGridViewCell In row.Cells

                    objExcelSheet.Cells(dgvRowIndex, dgvCellIndex) = cell.Value

                    dgvCellIndex += 1

                Next

                dgvRowIndex += 1

            Next

            ' Ajusta o largura das colunas automaticamente

            objExcelSheet.Columns.AutoFit()

            ' Caso a opção seja gravar (xlsSaveAs) grava o ficheiro e fecha

            ' o Workbook/Excel. Caso contrário (xlsOpen) abre o Excel

            If [option] = xlsOption.xlsSaveAS Then

                objExcelBook.SaveAs(fileName)

                objExcelBook.Close()

                objExcelApp.Quit()

                MessageBox.Show("Ficheiro exportado com sucesso para: " & fileName)

            Else

                objExcelApp.Visible = True

            End If

            ' Altera a tipo/localização para actual

            CurrentThread.CurrentCulture = oldCI

        Catch ex As Exception

            MessageBox.Show("Erro não identificado. Mensagem original:" & vbNewLine + ex.Message)

        Finally

            objExcelSheet = Nothing

            objExcelBook = Nothing

            objExcelApp = Nothing

            ' O GC(garbage collector) recolhe a memória não usada pelo sistema. 

            ' O método Collect() força a recolha e a opção WaitForPendingFinalizers 

            ' espera até estar completo. Desta forma o EXCEL.EXE não fica no 

            ' Task Manager(gestor tarefas) ocupando memória desnecessariamente

            ' (devem ser chamados duas vezes para maior garantia)

            GC.Collect()

            GC.WaitForPendingFinalizers()

            GC.Collect()

            GC.WaitForPendingFinalizers()

        End Try

    End Sub

Depois tenho chamo o ExportarToExcel no evento Click do botao

Se me conseguires ajudar agradeço!

Share this post


Link to post
Share on other sites
Caça

A verificaçã deve ser feita aqui

            For Each col As DataGridViewColumn In dgvproducao.Columns
                objExcelSheet.Cells(1, dgvColumnIndex) = col.HeaderText
                objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True
                dgvColumnIndex += 1
            Next

e aqui

                For Each cell As DataGridViewCell In row.Cells
                    objExcelSheet.Cells(dgvRowIndex, dgvCellIndex) = cell.Value
                    dgvCellIndex += 1
                Next


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
diego_10

Boas Pedro,

Pois eu sei que a verificaçao tem de ser ai, mas como sera feita essa verificação?  :D

A minha principal duvida e essa... :D

Cumprimentos

Share this post


Link to post
Share on other sites
Caça

Como é feita?

com um simples IF

        For Each col As DataGridViewColumn In dgvproducao.Columns
            If col.Visible = True Then
                objExcelSheet.Cells(1, dgvColumnIndex) = col.HeaderText
                objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True
                dgvColumnIndex += 1
            End If
        Next


        For Each cell As DataGridViewCell In row.Cells
            If cell.Visible = True Then
                objExcelSheet.Cells(dgvRowIndex, dgvCellIndex) = cell.Value
                dgvCellIndex += 1
            End If
        Next


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
diego_10

pois, isso ja tinha feito no inicio e nao esta a funcionar :S

Dai perguntar o como de o fazer, se possui outra maneira.

Cumprimentos

Share this post


Link to post
Share on other sites
Caça

O que é que não está a funcionar?

Está a dar erro?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

If col.Visible = True Then

Se a coluna estiver invisível não entra, não pode aparecer no cabeçalho da folha as colunas invisíveis


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
diego_10

Pois, dai eu perguntar como tava a fazer a validaçao e que me esta a aparecer e a condição esta igual a sua, ja a tinha feito antes e nao estava a funcionar, dai perguntar como a fazia.

Cumprimentos

Share this post


Link to post
Share on other sites
diego_10

Boas,

Mais uma questao, tenho a minha datagrid colorida, tenho maneira de passar para o excel as cores da datagrid?

Cumprimentos a todos!

Share this post


Link to post
Share on other sites
jpaulino

isto

Concordo :P

Diego tens de procurar primeiro ... o máximo que te podem mostrar são links, que podes encontrar também.

Share this post


Link to post
Share on other sites
diego_10

Boas,

Pois Jpaulinho eu sei, mas ca onde trabalho muitos dos sites onde posso encontrar essa informaçao não consigo ter acesso, dai fazer a pergunta no forum.

Mas obrigado na mesma, quando chegar a casa irei ver o link!

Cumprimentos a todos!

Share this post


Link to post
Share on other sites
jpaulino

Pois Jpaulinho eu sei, mas ca onde trabalho muitos dos sites onde posso encontrar essa informaçao não consigo ter acesso, dai fazer a pergunta no forum.

A questão não é perguntar, mas sim procurar primeiro antes de perguntar. Enquanto estás à espera que alguém responda a tua questão, com uma pesquisa no google, bing, sapo, etc, consegues encontrar vários exemplos.

Depois, se tiveres dúvidas em implementar ou se tiveres erros, aí sim, deves colocar a questão :P

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.