jueves, 17 de febrero de 2011

Función para exportar DataGridView a EXCEL vb.Net


Saludos le adjunto una subRutina que uso muy amenudo



Public Sub ExportarDatosExcel(ByVal DataGRidView As DataGridView, ByVal Titulo_Doc As String, ByVal SubTitulo_Doc As String)
Dim m_Excel As New Excel.Application
m_Excel.Cursor = Excel.XlMousePointer.xlWait
m_Excel.Visible = False
Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
Dim objHojaExcel As Excel.Worksheet = objLibroExcel.Worksheets(1)
With objHojaExcel
.Visible = Excel.XlSheetVisibility.xlSheetVisible
.Activate()
'Encabezado.
.Range("A1:L1").Merge()
.Range("A1:L1").Value = “LoboGriz”
.Range("A1:L1").Font.Bold = True
.Range("A1:L1").Font.Size = 14
'Texto despues del encabezado.
.Range("A2:L2").Merge()
.Range("A2:L2").Value = “Cangahuala Marquez”
.Range("A2:L2").Font.Bold = True
.Range("A2:L2").Font.Size = 10
'Espacio.
.Range("A3:L3").Merge()
.Range("A3:L3").Value = vbNullString
.Range("A3:L3").Font.Bold = True
.Range("A3:L3").Font.Size = 10
'Estilo a titulos de la tabla.
.Range("A4:P4").Font.Bold = True
'Establecer tipo de letra al rango determinado.
.Range("A1:P100").Font.Name = "Tahoma"
'Los datos se registran a partir de la columna A, fila 4.
Const primeraLetra As Char = "A"
Const primerNumero As Short = 4
Dim Letra As Char, UltimaLetra As Char
Dim Numero As Integer, UltimoNumero As Integer
Dim cod_letra As Byte = Asc(primeraLetra) - 1
Dim sepDec As String = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
Dim sepMil As String = Application.CurrentCulture.NumberFormat.NumberGroupSeparator
Dim strColumna As String = vbNullString
Dim LetraIzq As String = vbNullString
Dim cod_LetraIzq As Byte = Asc(primeraLetra) - 1
Letra = primeraLetra
Numero = primerNumero
Dim objCelda As Excel.Range
For Each c As DataGridViewColumn In DataGRidView.Columns
If c.Visible Then
: If Letra = "Z" Then
Letra = primeraLetra
cod_letra = Asc(primeraLetra)
cod_LetraIzq += 1
LetraIzq = Chr(cod_LetraIzq)
Else
cod_letra += 1
Letra = Chr(cod_letra)
End If
strColumna = LetraIzq + Letra + Numero.ToString
objCelda = .Range(strColumna, Type.Missing)
objCelda.Value = c.HeaderText
objCelda.EntireColumn.Font.Size = 10
'Establece un formato a los numeros por Default.
objCelda.EntireColumn.NumberFormat = c.DefaultCellStyle.Format
If c.ValueType Is GetType(Decimal) OrElse c.ValueType Is GetType(Double) Then
objCelda.EntireColumn.NumberFormat = "#" + sepMil + "0" + sepDec + "00"
'End If
End If
Next
Dim objRangoEncab As Excel.Range = .Range(primeraLetra + Numero.ToString, LetraIzq + Letra + Numero.ToString)
objRangoEncab.BorderAround(1, Excel.XlBorderWeight.xlMedium)
UltimaLetra = Letra
Dim UltimaLetraIzq As String = LetraIzq
'Cargar Datos del DataGridView.
Dim i As Integer = Numero + 1
For Each reg As DataGridViewRow In DataGRidView.Rows
LetraIzq = vbNullString
cod_LetraIzq = Asc(primeraLetra) - 1
Letra = primeraLetra
cod_letra = Asc(primeraLetra) - 1
For Each c As DataGridViewColumn In DataGRidView.Columns
If c.Visible Then
If Letra = "Z" Then
Letra = primeraLetra
cod_letra = Asc(primeraLetra)
cod_LetraIzq += 1
LetraIzq = Chr(cod_LetraIzq)
Else
cod_letra += 1
Letra = Chr(cod_letra)
End If
strColumna = LetraIzq + Letra
'Aqui se realiza la carga de datos.
.Cells(i, strColumna) = IIf(IsDBNull(reg.ToString), "", reg.Cells(c.Index).Value)
'Establece las propiedades de los datos del DataGridView por Default.
'.Cells(i, strColumna) = IIf(IsDBNull(reg.(c.DataPropertyName)), c.DefaultCellStyle.NullValue, reg(c.DataPropertyName))
'.Range(strColumna + i, strColumna + i).In()
End If
Next
Dim objRangoReg As Excel.Range = .Range(primeraLetra + i.ToString, strColumna + i.ToString)
objRangoReg.Rows.BorderAround()
objRangoReg.Select()
i += 1
Next
UltimoNumero = i
'Dibujar las líneas de las columnas.
LetraIzq = vbNullString
cod_LetraIzq = Asc("A")
cod_letra = Asc(primeraLetra)
Letra = primeraLetra
For Each c As DataGridViewColumn In DataGRidView.Columns
If c.Visible Then
objCelda = .Range(LetraIzq + Letra + primerNumero.ToString, LetraIzq + Letra + (UltimoNumero - 1).ToString)
objCelda.BorderAround()
If Letra = "Z" Then
Letra = primeraLetra
cod_letra = Asc(primeraLetra)
LetraIzq = Chr(cod_LetraIzq)
cod_LetraIzq += 1
Else
cod_letra += 1
Letra = Chr(cod_letra)
End If
End If
Next
'Dibujar el border exterior grueso de la tabla.
Dim objRango As Excel.Range = .Range(primeraLetra + primerNumero.ToString, UltimaLetraIzq + UltimaLetra + (UltimoNumero - 1).ToString)
objRango.Select()
objRango.Columns.AutoFit()
objRango.Columns.BorderAround(1, Excel.XlBorderWeight.xlMedium)
End With
m_Excel.Visible = True
m_Excel.Cursor = Excel.XlMousePointer.xlDefault
End Sub

No hay comentarios:

Publicar un comentario