Exportar Datagridview a Html

Siguiendo con exportaciones tambien existe la posibilidad de llevar la datagridview a una tabla en formato html. Fundamentalmente esta forma la encontre por ahi en la internet aunque ya no recuerdo en donde, la acople a mi ejemplo y lo expongo para que Uds tambien les sirva. Bueno continuando primeramente vamos a generar y llenar la grid, para luego crear una clase y ser llamada desde la aplicacion.

Para generar la grid al instanciar el formulario:

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'GENERAR Y RELLENAR EL DATAGRIDVIEW
        Try
            Dim n As Integer = 6 ' cualquier valor para sumar
            Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
            Dim valor As Double = 0.18 'valor de un articulo en común ....para ejemplificar
            Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada compra
            Dim suma As Double 'total de la suma de la columna subtotal
            For i As Integer = 0 To n - 1
                cantidad(i) = i 'Val(InputBox("Ingresar cantidad Nº" & i + 1)) 'Entrada manual
            Next
            For i As Integer = 0 To n - 1
                subtotal(i) = cantidad(i) * valor
                suma = suma + subtotal(i)
            Next
            grid1.Rows.Add(n + 1) 'numero de filas del grid
            For r As Integer = 0 To n - 1
                grid1.Item(0, r).Value = r + 1
                grid1.Item(1, r).Value = Format(cantidad(r), "0.00")
                grid1.Item(2, r).Value = Format(valor, "0.00")
                grid1.Item(3, r).Value = Format(subtotal(r), "0.00")
                grid1.Item(2, n).Value = "TOTALES="
                grid1.Item(3, n).Value = Format(suma, "0.00")
            Next
        Catch ex As KeyNotFoundException
            MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
        End Try
    End Sub

Creando la clase Html:

Imports System.IO
Imports System.Text
Imports System.Data

Public Class Html
    Private w As StreamWriter
    Private ruta As String
    Public titulogrande As String

    Public Property xpath() As String
        Get
            Return ruta
        End Get

        Set(ByVal value As String)
            value = ruta
        End Set
    End Property

    'Constructor que establece el path del archivo.
    Public Sub New(ByVal path As String)
        ruta = path
    End Sub

    'Exporta datos a un archivo HTML.
    Public Sub ExportarDatosHTML(ByVal titulos As ArrayList, ByVal datos As DataTable)
        Try
            Dim fs As New FileStream(ruta, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)
            w = New StreamWriter(fs)
            Dim comillas As String = Char.ConvertFromUtf32(34)
            Dim html As New StringBuilder()

            html.Append("<!DOCTYPE html PUBLIC" & comillas & "-//W3C//DTD XHTML 1.0 Transitional//EN" & comillas & " " & comillas & "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" & comillas & ">")
            html.Append("<html xmlns=" & comillas & "http://www.w3.org/1999/xhtml" & comillas & ">")
            html.Append("<head>")
            html.Append("<meta http-equiv=" & comillas & "Content-Type" & comillas & "content=" & comillas & "text/html;charset=utf-8" & comillas & "/>")
            html.Append("<title>Reporte de Ejemplo</title>")
            html.Append("</head>")
            html.Append("<body>")
            html.Append("<p><font face=" & comillas & "Tahoma" & comillas & "size=" & comillas & "6" & comillas & ">" + titulogrande + "</font></p>")
            html.Append("<p><font face=" & comillas & "Tahoma" & comillas & "size=" & comillas & "3" & comillas & ">" + "Reporte de Ejemplo: " + Now.Date() + "</font></p>")
            html.Append("</br>")
            html.Append("<table CELLSPACING=0 CELLPADDING=5 border=2 BORDERCOLOR=" & comillas & "#000000" & comillas & " bgcolor=" & comillas & "#FFFFFF" & comillas & ">")
            html.Append("<tr> <b>")
            For Each item As Object In titulos
                html.Append("<th>" & "<font face=" & comillas & "Tahoma" & comillas & "size=" & comillas & "2" & comillas & ">" & item.ToString() & "</font></th>")
            Next
            html.Append("</b> </tr>")
            'Generando datos desde el DataGridView.      
            For i As Integer = 0 To datos.Rows.Count - 1
                html.Append("<tr>")
                For j As Integer = 0 To datos.Columns.Count - 1
                    html.Append("<td>" & "<font face=" & comillas & "Tahoma" & comillas & "size=" & comillas & "2" & comillas & ">" + datos.Rows(i)(j).ToString() & "</font></td>")
                Next
                html.Append("</tr>")
            Next
            html.Append("</body>")
            html.Append("</html>")
            w.Write(html.ToString())
            w.Close()
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
End Class

Luego una captura del programa:




Desde el boton Exportar Html:

 Try
            'Intentar generar el documento.
            Dim titulos As New ArrayList()
            Dim datostabla As New DataTable()
            'Path que guarda el reporte en el escritorio de windows (Desktop).
            Dim [OF] As New Html(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\Reporte Ejemplo.html")
            'Se obtienen los titulos del DataGridView y se crean las columnas de la tabla.
            For Each item As DataGridViewColumn In grid1.Columns()
                titulos.Add(item.HeaderText)
                datostabla.Columns.Add()
            Next
            'Se crean las filas de la tabla.
            For Each item As DataGridViewRow In grid1.Rows
                Dim rowx As DataRow = datostabla.NewRow()
                datostabla.Rows.Add(rowx)
            Next
            'Se pasan los datos del dataGridView a la tabla.
            For Each item As DataGridViewColumn In grid1.Columns
                For Each itemx As DataGridViewRow In grid1.Rows
                    datostabla.Rows(itemx.Index)(item.Index) = grid1(item.Index, itemx.Index).Value
                Next
            Next
            [OF].ExportarDatosHTML(titulos, datostabla)
            Process.Start([OF].xpath)
        Catch ex As Exception
            'Si el intento es fallido, mostrar MsgBox.
            MessageBox.Show("No se puede generar el documento HTML.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Al ejecutar



El archivo se exporta al escritorio y se ejecuta inmediatamente. Nos vemos amigos en otra entrega, espero que les agrade, dejen sus comentarios y/o  un G+ si asi gustan, Bye..

Comentarios

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic