sergiotmcardoso Posted October 19, 2012 at 10:59 PM Report #479844 Posted October 19, 2012 at 10:59 PM (edited) Olá! Já efectuei pesquisa e encontrei código para exportar informação de uma datagridview para excel, no entanto, o que eu pretendia era ter um excel já com um layout definido previamente guardado, onde depois o programa carregava nesse excel a informação da datagridview. No código que vou colocar, apenas consigo criar um excel novo. Podem dar-me uma ajuda sff Private Sub Button73_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button73.Click ' Exporta e abre o Microsoft Excel ExportToExcel(Me.DataGridView1, xlsOption.xlsOpen) ' Exporta e grava o ficheiro na localização indicada 'ExportToExcel(Me.DataGridView1, xlsOption.xlsSaveAs, "C:\DISCO2\DESENVOLVIMENTO\SCCOND\fraccoes.xls") End Sub ' Criar uma nova instância do Excel Dim objExcelApp As New Excel.Application Enum xlsOption xlsSaveAs xlsOpen End Enum ''' <summary> ''' Exporta a informação de uma DataGridView para o Microsoft Excel ''' </summary> ''' <param name="dgvName">DataGridView1</param> ''' <param name="option">SaveAs</param> ''' <param name="filename">C:\DISCO2\DESENVOLVIMENTO\SCCOND\fraccoes.xls</param> 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 ' 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 dgvName.Columns 'AQUI SE DEFINE EM QUE LINHA COMEÇA A SER ESCRITO O CABEÇALHO NO EXCEL objExcelSheet.Cells(3, dgvColumnIndex) = col.HeaderText objExcelSheet.Cells(1, dgvColumnIndex).Font.Bold = True dgvColumnIndex += 1 Next ' Ciclo nas linhas/células 'AQUI SE DEFINE EM QUE LINHA COMEÇA A SER ESCRITAS AS LINHAS NO EXCEL Dim dgvRowIndex As Integer = 4 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 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 Edited October 20, 2012 at 11:09 PM by sergiotmcardoso Adicionado bloco código
jpaulino Posted October 20, 2012 at 08:28 AM Report #479860 Posted October 20, 2012 at 08:28 AM Basicamente em vez de adicionares um novo workbook: objExcelBook = objExcelApp.Workbooks.Add Abres o que já tens: objExcelBook = objExcelApp.Workbooks.Open("Meu ficheiro.xls")
sergiotmcardoso Posted October 20, 2012 at 11:09 PM Author Report #479889 Posted October 20, 2012 at 11:09 PM Obrigado pela edição (para a próxima já sei como colocar o código) E obrigado também pela ajuda, testado e a funcionar 🙂
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now