Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Ana Sousa

Datagrid para excel

Mensagens Recomendadas

Ana Sousa    0
Ana Sousa

Ola!

Estava a tentar fazer exportaçao de dados para o excel atraves do datagrid, segui o site.

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

mas dame varios erros como o xlsoption

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

Dim objExcelApp As New Excel.Application()

da erro  no excel application

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

e nessa linha de codigo tb.

A versao do vb.net e a version 9.0.30729.1 SP

do excel é 2007 ( 12.0.6331.5000) SP 1 MSO ( 12.0.6320.5000)

Ana Sousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
José Lopes    1
José Lopes

  
    Enum xlsOption
        xlsSaveAs
        xlsOpen
    End Enum

Depois dos imports e antes qualquer outro código... onde? num módulo público ou no próprio form

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ana Sousa    0
Ana Sousa

É o codigo que tenho ( e igual ao do post)

meti tudo numa class

   Imports Microsoft.Office.Interop
Imports System.Threading.Thread
Imports System.Globalization
Imports Excel
Imports Microsoft.Office.Interop.Excel

Enum xlsOption

    xlsSaveAs

    xlsOpen

End Enum





Public Class Class1
    Public Sub ExportToExcel(ByVal dgvName 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

            ' Verifica 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 a gravar ...")
                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 corrente
            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 dgvName.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 dgvName.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 automáticamente

            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 desnecessáriamente

            GC.Collect()
            GC.WaitForPendingFinalizers()
        End Try


    End Sub


End Class
   

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
José Lopes    1
José Lopes

porque? o paulino tem-o fora.. e eu testei aqui e é reconhecido..logo o problem nao e daqui...

Ana, o erro que dá... é não reconhecer algum elemento?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hellblazer    0
Hellblazer

porque? o paulino tem-o fora.. e eu testei aqui e é reconhecido..logo o problem nao e daqui...

Ana, o erro que dá... é não reconhecer algum elemento?

No codigo do jpaulino nem tens uma class porque o codigo nao e simplesmente para copiar e para entender tambem...

É um principio base da que o Enum tinha de estar dentro da class...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

Sim, no public sub ele  nao reconhece o xlsOption.

Ana

Das duas, uma:

Ou colocas o Enum dentro da tua classe (recomendado) ou defines o enum como Public

Public Enum xlsOption
    xlsSaveAs
    xlsOpen
End Enum

No codigo do jpaulino nem tens uma class porque o codigo nao e simplesmente para copiar e para entender tambem...

É um principio base da que o Enum tinha de estar dentro da class...

Fora da classe só devem estar duas coisas: os imports ou outra classe :cheesygrin:(normalmente)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ana Sousa    0
Ana Sousa

sim, ja meti dentro da class e ja n tenho esse erro :cheesygrin:

Mas continuo a ter o erro no

 Dim objExcelApp As New Excel.Application()

diz que 'New' cannot be used on an interface.

Ja exprimentei tirar o NEW, mas depois da outros erros.

os imports que tenho sao

Imports Microsoft.Office.Interop
Imports Excel
Imports Microsoft.Office.Interop.Excel

Obrigada

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ana Sousa    0
Ana Sousa

Ja deu assim :cheesygrin:

Obrigada

Agora para abrir tenho que criar, um botao no form, e meter la

 ExportToExcel(Me.DataGridView1, xlsOption.xlsOpen) 

mas nao terei que criar para ser public?? porque assim da erro diz que nao esta declarado

Obrigada

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ana Sousa    0
Ana Sousa

Agora  na class so me da erro nestas duas linhas de codigo.

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

Ainda sou nova nisto, por isso que ainda  nao sei quase nada, mas com pesquisas espero daqui a uns tempos ser melhorzinha.  :)

Como é que eu declaro?

Obrigada

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ana Sousa    0
Ana Sousa

Esta exte valor

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

Ao digitar devo  me ter eskecido  :-[

Obrigado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade