20 ago 2013

Exportar datos de un datagridview a un fichero excel



A continuación os dejo el código fuente del programa hecho en visual basic 2012 

Está probado y sin errores. 
Podéis cambiar las variables por las vuestras. 

Los nombres de los objetos y su correspondiente uso están en el siguiente listado 


Exportar

  • DGV (es un DataGridView) para ingresar y almacenar los datos a exportar
  • Button1 para Exportar los datos a Excel 
  • Debemos importar System.Data.OleDb 
  • Crear un método ExportarExcel 

Imports System.Data.OleDb 

Public Sub ExportarExcel(ByVal dgv As DataGridView, ByVal pth As String) 
        Dim xlApp As Object = CreateObject("Excel.Application")

        'creamos una nueva hoja de calculo 
        Dim xlWB As Object = xlApp.WorkBooks.add
        Dim xlWS As Object = xlWB.WorkSheets(1)

        'exportamos los caracteres de las columnas 
        For c As Integer = 0 To dgv.Columns.Count - 1
            xlWS.cells(1, c + 1).value = dgv.Columns(c).HeaderText
        Next

        'exportamos las cabeceras de columnas 
        For r As Integer = 0 To dgv.RowCount - 1
            For c As Integer = 0 To dgv.Columns.Count - 1
                xlWS.cells(r + 2, c + 1).value = dgv.Item(c, r).Value
            Next
        Next

        'guardamos la hoja de calculo en la ruta especificada 
        xlWB.saveas(pth)
        xlWS = Nothing
        xlWB = Nothing
        xlApp.quit()
        xlApp = Nothing
End Sub 



  • El botón Button1 que llama a la función con los parámetros DataGridView y Path
  • En mi caso genero dos archivos, uno para gastos y otro para ingresos (de ahí los dos GridIngresos y GridGastos).
  • Los guardaremos en una carpeta en C:\Programa\Excel\ y el año de la creación
  • En el nombre de cada fichero el día y el mes de la creación

Private Sub Button1_Click 
        Dim correcto As Boolean = True

        Dim d As Date
        d = Date.Now
        Dim completDate As String = d.ToString()
        Dim aux() As String = completDate.Split(" ")
        Dim fechaCompleta() As String = aux(0).Split("/")
        Dim dia As String = fechaCompleta(0)
        Dim mes As String = fechaCompleta(1)
        Dim año As String = fechaCompleta(2)

        Dim saveIngresos As New SaveFileDialog
        saveIngresos.FileName = "C:Programa\Excel\" & año & "\" & dia & "." & mes & ".INGRESOS.xls"

        Dim saveGastos As New SaveFileDialog
        saveGastos.FileName = "C:Programa\Excel\" & año & "\" & dia & "." & mes & ".GASTOS.xls"
        Try
            ExportarExcel(GridIngresos, saveIngresos.FileName)
            ExportarExcel(GridGastos, saveGastos.FileName)
        Catch
            MsgBox("No se pudo guardar", MsgBoxStyle.Exclamation, "Error")
            correcto = False
        End Try

        If correcto Then
            MsgBox("Ficheros generados correctamente", MsgBoxStyle.Information, "Correcto")
        End If
End Sub 


1 comentario: