Sei sulla pagina 1di 3

VB.

NET: Exportar DataGridView para Excel


O Microsoft Excel uma ferramenta muito utilizada e normalmente um dos formatos que se disponibiliza quando se exporta informao. Esta opo permite ao utilizador modificar dados, criar grficos personalizados, alterar a informao, etc. Early Binding vs Late Binding Para realizar automao atravs do VB.NET, e para explicar um pouco as principais diferenas, existem dois mtodos que se podem utilizar: Late Binding e Early Binding. O Late Binding utiliza o CreateObject() para criar uma nova instncia do Excel ou o GetObject() para manipular uma instncia j criada. Um exemplo das suas utilizaes: Criar uma nova instncia do Excel Dim objExcelApp As Object objExcelApp = CreateObject("Excel.Application") Manipular uma instncia j criada Dim objExcelApp As Object objExcelApp = GetObject(, "Excel.Application") As suas principais vantagens so: Independente da verso utilizada, ou seja, no especfico para uma verso e pode ser utilizado tanto na verso 97 do Excel com na 2007. Existem incompatibilidades entre verses e um cdigo desenvolvido em Excel 2003 provavelmente no funcionar em Excel 2007 (por exemplo); Reduo do tamanho do projecto, ou seja, quanto mais referncias forem adicionadas ao projecto, maior a tamanho do mesmo e mais demorado o tempo de compilao; Alguns ambientes de programao no permitem adicionar referncias ao projecto; Para utilizar o mtodo Early Binding necessrio adicionar a referncia livraria a utilizar (ex. Microsoft Excel 11.0 Object Library). Criar uma nova instncia do Excel Dim objExcelApp As New Excel.Application As principais vantagens so: O cdigo mais rpido uma vez que compilado antes da execuo. Utilizando o Late Binding o cdigo compilado quando executado reduzindo o performance; Acesso ao intellisense o que permite aceder s constantes, mtodos, objectos, etc. Com o Late Binding o programar s cegas. Permite detectar erros no cdigo antes da execuo, atravs do debug, uma vez que este compilado. Por estas diferenas, e sempre que possvel, recomendvel a utilizao do Early Binding. O seguinte exemplo ser efectuado usando o Early Binding. Exportao para Excel A automao para Excel permite fazer tudo (ou quase tudo) o que se pode fazer no Excel. Desde formaes, grficos, frmulas, etc, etc. Neste exemplo ser mostrado como exportar o contedo de uma DataGridView permitindo gravar para o disco ou abrir o Excel com os resultados. Para utilizar este exemplo necessrio adicionar como referncia ao nosso projecto o Microsoft Excel XX.0 Object Library. Dependendo da verso do Excel poder ser necessrio (para facilitar) importar as classes Microsoft.Office.Interop ou no.

Imports Microsoft.Office.Interop Imports System.Threading.Thread Imports System.Globalization Enum xlsOption xlsSaveAs xlsOpen End Enum ''' <summary> ''' Exporta a informao de uma datagridview para o Microsoft Excel ''' </summary> ''' <param name="dgvName">Nome da datagridview</param> ''' <param name="option">SaveAs ou Open</param> ''' <param name="fileName">Nome completo do ficheiro</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 ' Verifica se foi seleccionada a opo xlsSaveAs e no foi indicado ficheiro If [option] = xlsOption.xlsSaveAs And fileName = String.Empty Then MessageBox.Show(" necessrio indicar um nome para o ficheiro a gravar ...") Exit Sub End If ' Altera o tipo/localizao para Ingls. Existe incompatibilidade ' entre algumas verses 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 cabealhos para escrever os ttulos 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/clulas 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 automticamente objExcelSheet.Columns.AutoFit() ' Caso a opo seja gravar (xlsSaveAs) grava o ficheiro e fecha ' o Workbook/Excel. Caso contrrio (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/localizao para actual CurrentThread.CurrentCulture = oldCI Catch ex As Exception MessageBox.Show("Erro no identificado. Mensagem original:" + vbNewLine + ex.Message) Finally objExcelSheet = Nothing objExcelBook = Nothing objExcelApp = Nothing ' O GC(garbage collector) recolhe a memria no usada pelo sistema. ' O mtodo Collect() fora a recolha e a opo WaitForPendingFinalizers ' espera at estar completo. Desta forma o EXCEL.EXE no fica no ' task manager(gestor tarefas) ocupando memria desnecessriamente GC.Collect() GC.WaitForPendingFinalizers() End Try End Sub Finalmente para utilizar no programa: ' Exporta e abre o Microsoft Excel ExportToExcel(Me.DataGridView1, xlsOption.xlsOpen) ' Exporta e grava o ficheiro na localizao indicada ExportToExcel(Me.DataGridView1, xlsOption.xlsSaveAs, "c:\meuFicheiroExcel.xls") O objectivo deste artigo mostrar como utilizar a automao do Excel atravs do VB.NET e alguns truques que facilitam e optimizam este processo. O exemplo de exportar uma DataGridView tambm muito util uma vez que um controlo bastante utilizado.

Potrebbero piacerti anche