Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
Try
treeGridView1.Columns("Column8").Visible = True
treeGridView1.Columns("CIERTOFALSO").Visible = False
treeGridView1.Columns("Column21").Visible = False
'Column21
Me.Cursor = Cursors.WaitCursor
RBtnEspecialidades.Enabled = False
RBtnPartidas.Enabled = False
RBtnSubcontratos.Enabled = False
RBtNTODO.Enabled = False
'Intentar generar el documento.
'Se adjunta un texto debajo del encabezado con la fecha actual del sistema.
ExportarDatosExcel(treeGridView1, "FECHA: " + Now.Date())
'System.Drawing.Image.FromFile("C:\Users\juan.ayala\Desktop\tache.ico")
Me.Cursor = Cursors.Default
RBtnEspecialidades.Enabled = True
RBtnPartidas.Enabled = True
RBtnSubcontratos.Enabled = True
RBtNTODO.Enabled = True
treeGridView1.Columns("Column8").Visible = False
treeGridView1.Columns("CIERTOFALSO").Visible = True
treeGridView1.Columns("Column21").Visible = True
Catch ex As Exception
'Si el intento es fallido, mostrar MsgBox.
MessageBox.Show("No se puede generar el documento Excel.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
'seguido del que se encarga de cargar los datos y leerlos
Public Sub ExportarDatosExcel(ByVal treeGridView1 As DataGridView, ByVal titulo As String)
Dim m_Excel As New Excel.Application
m_Excel.Cursor = Excel.XlMousePointer.xlWait
'La linea de abajo hace que el archivo que se este llenando no se muestre, ya que si el usuario da click en ese momento se cancela la exportacion a excel
' de esta manera de evita y una vez lleno al finalizar el codigo se pone el visible = true para mostrar el excel lleno y evitar errores
m_Excel.Visible = False
Dim objLibroExcel As Excel.Workbook = m_Excel.Workbooks.Add
'Dim objLibroExcel As Excel.Workbook
'bjLibroExcel = m_Excel.Workbooks.Open(".xlsb")
Dim objHojaExcel As Excel.Worksheet = objLibroExcel.Worksheets(1)
With objHojaExcel
.Visible = Excel.XlSheetVisibility.xlSheetVisible
.Activate()
'Encabezado
.Range("A1:L1").Merge()
.Range("A1:L1").Value = "PROGRAMA DE CONTRATACIONES"
'.Range("A1:L1").Value = System.Drawing.Image.FromFile("C:\Users\juan.ayala\Desktop\SINDY 05-07-2018\SINDY\SINDY\Resources\Logo Nuevo 3.jpg")
'ActiveSheet.Pictures.Insert("C:\grafico.png")
.Range("A1:L1").Font.Bold = True
.Range("A1:L1").Font.Size = 15
'Copete
.Range("A2:L2").Merge()
.Range("A2:L2").Value = titulo
.Range("A2:L2").Font.Bold = True
.Range("A2:L2").Font.Size = 12
Const primeraLetra As Char = "A"
Const primerNumero As Short = 3
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
'Establecer formatos de las columnas de la hija de cálculo
Dim strColumna As String = ""
Dim LetraIzq As String = ""
Dim cod_LetraIzq As Byte = Asc(primeraLetra) - 1
Letra = primeraLetra
Numero = primerNumero
Dim objCelda As Excel.Range
For Each c As DataGridViewColumn In treeGridView1.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 = 8
'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
'CARGA DE DATOS
Dim i As Integer = Numero + 1
For Each reg As DataGridViewRow In treeGridView1.Rows
Dim _x As Object = reg
LetraIzq = ""
cod_LetraIzq = Asc(primeraLetra) - 1
Letra = primeraLetra
cod_letra = Asc(primeraLetra) - 1
For Each c As DataGridViewColumn In treeGridView1.Columns
Dim _y As Object = c
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
' acá debería realizarse la carga
Try
.Cells(i, strColumna) = IIf(IsDBNull(reg.ToString), "", reg.Cells(c.Index).Value)
'.Cells(i, strColumna) = IIf(IsDBNull(reg.(c.DataPropertyName)), c.DefaultCellStyle.NullValue, reg(c.DataPropertyName))
'.Range(strColumna + i, strColumna + i).In()
Catch ex As Exception
End Try
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 = ""
cod_LetraIzq = Asc("A")
cod_letra = Asc(primeraLetra)
Letra = primeraLetra
For Each c As DataGridViewColumn In treeGridView1.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
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.Cursor = Excel.XlMousePointer.xlDefault
m_Excel.Visible = True
End Sub