Option Explicit On Option Strict On Imports System.Data Imports System.Drawing Imports System.IO Imports CrystalDecisions.CrystalReports.Engine Imports Extensiones Imports GemBox.Spreadsheet Imports Microsoft.Reporting.WebForms Partial Class Nomina_RepPersonalDIM Inherits ClsPaginas Public Property Dt_Datos As DataTable Get If ViewState("Dt_Datos") Is Nothing Then ViewState("Dt_Datos") = New DataTable End If Return DirectCast(ViewState("Dt_Datos"), DataTable) End Get Set(value As DataTable) ViewState("Dt_Datos") = value End Set End Property Protected Sub Nomina_RepPersonalDIM(sender As Object, e As EventArgs) Handles Me.Load If Not Page.IsPostBack Then CargaEjercicios() DdlEjercicio.SelectedValueExist(UsuarioActual.Empresa.EjercicioActual) End If End Sub Private Sub CargaEjercicios() 'Dim ClsConta As New ClsContPAQi(UsuarioActual.Empresa) Dim ClsConta As New ClsContabilidad If ClsConta.GetEjercicios(UsuarioActual.CveEmpresa) Then DdlEjercicio.DataSource = ClsConta.DtResultados Else DdlEjercicio.DataSource = Nothing End If ClsConta.Dispose() DdlEjercicio.DataBind() DdlEjercicio.SelectedValueExist(UsuarioActual.Empresa.EjercicioActual.ToString) If DdlEjercicio.Items.Count = 0 Then DdlEjercicio.Items.Add(New ListItem(Now.Year.ToString, Now.Year.ToString)) End If End Sub Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs) CargaDatos() End Sub Private Sub CargaDatos() Dt_Datos = New DataTable LnkDescargaArchivo.Visible = False LnkExportar.Visible = False Dim ObjNom As New ClsNominas If ObjNom.GetRepPersonalDIM(Ejercicio:=DdlEjercicio.SelectedValue.ToEntero, CveEmpresa:=UsuarioActual.CveEmpresa) Then GvDatos.DataSource = ObjNom.DtResultados Dt_Datos = ObjNom.DtResultados If Dt_Datos.Rows.Count > 0 Then LnkDescargaArchivo.Visible = True LnkExportar.Visible = True End If Else GvDatos.DataSource = Nothing End If ObjNom.Dispose() GvDatos.DataBind() UpAcciones.Update() UpGvCargaDatos.Update() End Sub #Region "DESCARGA EXCEL" Private Sub LnkExportar_Click(sender As Object, e As EventArgs) Handles LnkExportar.Click Imprimir("Excel") End Sub Private Sub Imprimir(Optional reporte As String = "PDF") ExportToExcelGembox(GvDatos, "RepPersonalDIM", UsuarioActual, "Reporte Personal DIM", "", DatosFiltros:=$"Ejercicio {DdlEjercicio.SelectedItem.Text}") End Sub Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control) End Sub Protected Sub LnkDescargaArchivo_Click(ByVal sender As Object, ByVal e As EventArgs) Handles LnkDescargaArchivo.Click Dim tabla As DataTable = Dt_Datos Dim contenidoBytes As Byte() = Encoding.UTF8.GetBytes(ConvertirTablaATexto(tabla)) Using memoryStream As New MemoryStream(contenidoBytes) Response.Clear() Response.ContentType = "text/plain" Response.AddHeader("Content-Disposition", $"attachment; filename=RepPersonalDIM{DdlEjercicio.SelectedItem.Text}.txt") memoryStream.WriteTo(Response.OutputStream) End Using Response.End() End Sub Public Function ConvertirTablaATexto(ByVal DT As DataTable) As String Dim DTDatos As DataTable = DT.Copy() Dim columnasARemover As New List(Of DataColumn)() For Each columna As DataColumn In DTDatos.Columns If columna.ColumnName.Contains("CvePersonal") Then columnasARemover.Add(columna) End If Next For Each columna As DataColumn In columnasARemover DTDatos.Columns.Remove(columna) Next DTDatos.AcceptChanges() Dim sb As New StringBuilder For Each fila As DataRow In DTDatos.Rows For i As Integer = 0 To DTDatos.Columns.Count - 1 sb.Append(fila(i).ToString()) If i < DTDatos.Columns.Count - 1 Then sb.Append("|") End If Next sb.AppendLine() Next Return sb.tostring End Function #End Region Protected Sub GvDatos_DataBound(sender As Object, e As EventArgs) Dim row As New GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal) Dim cell As New TableHeaderCell() cell.Text = "ANEXO 1 INFORMACION DEL EMPLEADO ->" cell.ColumnSpan = 28 cell.HorizontalAlign = HorizontalAlign.Left row.Controls.Add(cell) cell = New TableHeaderCell() cell.ColumnSpan = 18 cell.Text = "ANEXO 1 PAGOS POR SEPARACION ->" cell.HorizontalAlign = HorizontalAlign.Left row.Controls.Add(cell) cell = New TableHeaderCell() cell.ColumnSpan = 2 cell.Text = " ANEXO 1 ASIM SAL-> " cell.HorizontalAlign = HorizontalAlign.Left row.Controls.Add(cell) cell = New TableHeaderCell() cell.ColumnSpan = 58 cell.Text = "ANEXO 1 PAGOS DEL PATRÓN EFECTUADOS A SUS TRABAJADORES ->" cell.HorizontalAlign = HorizontalAlign.Left row.Controls.Add(cell) cell = New TableHeaderCell() cell.ColumnSpan = 19 cell.Text = "ANEXO 1 IMPUESTO SOBRE LA RENTA (RESUMEN) ->" cell.HorizontalAlign = HorizontalAlign.Left row.Controls.Add(cell) 'row.BackColor = ColorTranslator.FromHtml("#3AC0F2") GvDatos.HeaderRow.Parent.Controls.AddAt(0, row) End Sub Public Sub ExportToExcelGembox(GridView As GridView, NombreArchivoXLSx As String, Usuario As Usuario, Titulo As String, Optional DatoTituloExtra As String = "", Optional DatosFiltros As String = "", Optional AnchoImagen As Integer = 100, Optional AlturaImagen As Integer = 100, Optional DTExtra As DataTable = Nothing) Dim sw1 As New StringWriter() Dim htw1 As New HtmlTextWriter(sw1) GridView.RenderControl(htw1) Dim options = GemBox.Spreadsheet.LoadOptions.HtmlDefault Dim htmlStream1 = New MemoryStream(options.Encoding.GetBytes(sw1.ToString())) htmlStream1.Position = 0 Dim sr1 As New StreamReader(htmlStream1) Dim myStr1 = sr1.ReadToEnd() sr1.Dispose() htmlStream1.Dispose() sw1.Dispose() Dim HtmlCompleto As String = myStr1 HtmlCompleto = Regex.Replace(HtmlCompleto, "\<[\/]*a[^\>]*\>", "") Dim htmlStream5 = New MemoryStream(options.Encoding.GetBytes(HtmlCompleto)) GemBox.Spreadsheet.SpreadsheetInfo.SetLicense(SerialGemBoxSpreadsheet) Dim excel As GemBox.Spreadsheet.ExcelFile excel = GemBox.Spreadsheet.ExcelFile.Load(htmlStream5, options) If Usuario IsNot Nothing Then Dim TotalRowHeader As Integer = 6 Dim TotalRowFooter As Integer = 2 Dim worksheet = excel.Worksheets(0) worksheet.Rows.InsertEmpty(0, TotalRowHeader) Dim celdasConTexto = worksheet.GetUsedCellRange(True) If celdasConTexto Is Nothing Then Exit Sub 'No se recuperaron datos, salir de sin guardar porque soltará error celdasConTexto.Style.Font.Name = "Calibri Light" Dim RangoNombreEmpresa = worksheet.Cells.GetSubrangeAbsolute(1, celdasConTexto.FirstColumnIndex, 1, celdasConTexto.LastColumnIndex) RangoNombreEmpresa.Merged = True RangoNombreEmpresa.Value = Usuario.Empresa.Empresa RangoNombreEmpresa.Style.Font.Size = 18 * 20 RangoNombreEmpresa.Style.Font.Name = "Calibri Light" RangoNombreEmpresa.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center RangoNombreEmpresa.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center Dim RangoTitulo = worksheet.Cells.GetSubrangeAbsolute(3, celdasConTexto.FirstColumnIndex, 3, celdasConTexto.LastColumnIndex) RangoTitulo.Merged = True RangoTitulo.Value = Titulo RangoTitulo.Style.Font.Size = 20 * 20 RangoTitulo.Style.Font.Name = "Calibri Light" RangoTitulo.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center RangoTitulo.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center If DatoTituloExtra.Length > 0 Then Dim RangoDatoTituloExtra = worksheet.Cells.GetSubrangeAbsolute(TotalRowHeader, celdasConTexto.FirstColumnIndex, TotalRowHeader, celdasConTexto.LastColumnIndex) RangoDatoTituloExtra.Merged = True RangoDatoTituloExtra.Value = DatoTituloExtra RangoDatoTituloExtra.Style.Font.Size = 20 * 20 RangoDatoTituloExtra.Style.Font.Name = "Calibri Light" RangoDatoTituloExtra.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Left RangoDatoTituloExtra.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center End If If DatosFiltros.Length > 0 Then Dim Arreglo As String() = DatosFiltros.Split("|"c) worksheet.Rows.InsertEmpty(TotalRowHeader, Arreglo.Count) For Each TextoFiltro As String In Arreglo Dim RangoDatoTituloExtra = worksheet.Cells.GetSubrangeAbsolute(TotalRowHeader, celdasConTexto.FirstColumnIndex, TotalRowHeader, celdasConTexto.LastColumnIndex) RangoDatoTituloExtra.Merged = True RangoDatoTituloExtra.Value = TextoFiltro RangoDatoTituloExtra.Style.Font.Size = 12 * 20 RangoDatoTituloExtra.Style.Font.Name = "Calibri Light" RangoDatoTituloExtra.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Left RangoDatoTituloExtra.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center TotalRowHeader += 1 Next End If ' TotalRowHeader += 2 For i = celdasConTexto.FirstColumnIndex To celdasConTexto.LastColumnIndex worksheet.Rows(TotalRowHeader).Cells(i).Style.Font.Size = 12 * 20 worksheet.Rows(TotalRowHeader).Cells(i).Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center worksheet.Rows(TotalRowHeader).Cells(i).Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center worksheet.Rows(TotalRowHeader).Cells(i).Style.FillPattern.SetPattern(GemBox.Spreadsheet.FillPatternStyle.Solid, GemBox.Spreadsheet.SpreadsheetColor.FromArgb(75, 119, 190), GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255)) worksheet.Rows(TotalRowHeader).Cells(i).Style.Font.Color = GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255) If i > 0 Then Try worksheet.Columns(i).AutoFit(1) Catch ex As Exception End Try End If Next Dim IndexEndTable As Integer = GridView.Rows.Count + TotalRowHeader + TotalRowFooter worksheet.Rows(IndexEndTable).Cells(1).Value = "Usuario Imprimió" worksheet.Rows(IndexEndTable + 1).Cells(1).Value = Usuario.Nombre worksheet.Rows(IndexEndTable).Cells(3).Value = "Fecha Impresión" worksheet.Rows(IndexEndTable + 1).Cells(3).Value = DateTime.Now.ToString("dd/MM/yyyy") Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", Usuario.Empresa.Ruta)) If Imagen.Exists Then Dim Ruta As String = String.Format("{0}/Logo.png", Usuario.Empresa.Ruta) Using sr As New StreamReader(Ruta) Dim ms As New MemoryStream() sr.BaseStream.CopyTo(ms) worksheet.Pictures.Add(ms, ExcelPictureFormat.Png, "A1", AnchoImagen, AlturaImagen, LengthUnit.Pixel) End Using End If For I = celdasConTexto.FirstColumnIndex To celdasConTexto.LastColumnIndex If I > 0 Then If 1 = 1 Then worksheet.Columns(I + 1).Style.NumberFormat = "#,##0.00" Else worksheet.Columns(I + 1).Style.NumberFormat = "#,##" End If Try worksheet.Columns(I).AutoFit(1) Catch ex As Exception End Try End If Next If DTExtra IsNot Nothing Then Dim NombreTabla As String = "" If DTExtra.TableName IsNot Nothing Then NombreTabla = DTExtra.TableName End If If NombreTabla.Trim = "" Then NombreTabla = "hoja2" End If 'excel.Worksheets.Add(NombreTabla) Dim workbookDTExtra = New ExcelFile Dim worksheetDTExtra = workbookDTExtra.Worksheets.Add(NombreTabla) worksheetDTExtra.InsertDataTable(DTExtra, New InsertDataTableOptions() With { .ColumnHeaders = True, .StartRow = 0 }) Dim columnCount = worksheetDTExtra.CalculateMaxUsedColumns() For i As Integer = 0 To columnCount - 1 worksheetDTExtra.Columns(i).AutoFit(1, worksheetDTExtra.Rows(1), worksheetDTExtra.Rows(worksheetDTExtra.Rows.Count - 1)) worksheetDTExtra.Cells(0, i).Style.FillPattern.SetSolid(Drawing.ColorTranslator.FromHtml("#4b77be")) worksheetDTExtra.Cells(0, i).Style.Font.Color = GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255) Next excel.Worksheets.AddCopy(NombreTabla, worksheetDTExtra) excel.Worksheets(0).Name = Titulo End If Dim indexRow As Integer = 8 Dim indexRowGV As Integer = 0 Dim cssClassRow As String = "" Dim CountRowFiltros As Integer = -1 If DatosFiltros.Trim.Length > 0 Then CountRowFiltros = 0 End If For indexRow = 8 To worksheet.Rows.Count - 4 Try cssClassRow = GridView.Rows(indexRowGV).CssClass.Trim() Select Case cssClassRow Case "Totales" worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.FillPattern.SetSolid(System.Drawing.ColorTranslator.FromHtml("#67809f")) worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.Font.Weight = 1000 worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.Font.Color = System.Drawing.ColorTranslator.FromHtml("#ddd") Exit Select Case "SubTotales2" worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.FillPattern.SetSolid(System.Drawing.ColorTranslator.FromHtml("#c0c0c0")) worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.Font.Weight = 1000 worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.Font.Color = System.Drawing.ColorTranslator.FromHtml("#000077") Exit Select Case "SubTotales" worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.FillPattern.SetSolid(System.Drawing.ColorTranslator.FromHtml("#dddddd")) worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.Font.Weight = 1000 worksheet.Cells.GetSubrangeRelative(indexRow + CountRowFiltros, 0, celdasConTexto.LastColumnIndex + 1, 1).Style.Font.Color = System.Drawing.ColorTranslator.FromHtml("#67809F") Exit Select Case Else Exit Select End Select Catch ex As Exception End Try indexRowGV += 1 Next End If excel.Save(HttpContext.Current.Response, $"{NombreArchivoXLSx}.xlsx") End Sub End Class