• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Ana Sousa

Datagrid para excel

36 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

axo que nao :D

mas tb nao sei como fazer :cheesygrin:

Agradecia ajuda , estou aqui a  :wallbash: lol

Obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Adicionas-te a referencia "Microsoft Excel XX.0 Object Library" como la diz no site?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

  
    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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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
   

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok..eu tenhos todos os enums a parte, como publicos..dai a confusao.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dim objExcelApp As Excel.Application
objExcelApp = CType(CreateObject("Excel.Application"), Excel.Application)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao.... se ele reconhecer todos os outros elementos....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ou entao colocou-lhe outro nome... tb pode estar a acontecer...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o erro e este

        Expression is a value and therefore cannot be the target of an assignment.

Obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao falta nada a frente desta linha?

objExcelSheet.Cells(dgvRowIndex, dgvCellIndex)

tens de lhe atribuiir um valor...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esta exte valor

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

Ao digitar devo  me ter eskecido  :-[

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De nada lol...

Se ja tiveres os teus problemas resolvidos não te esquecas de por no nome do topico [Resolvido]

0

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