private static IWorkbook CrearLibro <T>(IEnumerable <T> datos, TipoExportacion tipoExportacion, string grupo) { //Inicializamos el archivo excel IWorkbook workbook = new HSSFWorkbook(); ISheet sheet = workbook.CreateSheet("DatosExportados"); //Inmoviliza la cabecera del reporte sheet.CreateFreezePane(0, 1, 0, 1); workbook = AgregarDatos <T>(workbook, datos, tipoExportacion, grupo); return(workbook); }
public static MemoryStream Exportar <T>(IEnumerable <T> datos, TipoExportacion tipoExportacion, string grupo) { //Iniciamos el reloj, Calculamos la memoria inicial, Escribimos el inicio del proceso Stopwatch sw = Stopwatch.StartNew(); long totalMemoriaInicial = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / 1024; log.Debug(string.Format("Inicio:{0}|{1}", totalMemoriaInicial.ToString(), sw.Elapsed.ToString())); //Validamos la existencia del parametro datos if (datos == null) { throw new ArgumentException("No hay datos para exportar.", "datos"); } //Inicializamos los estilos de la exportación estilosHistoricos = new List <Estilos>(); //Asignamos un valor por defecto del parametro grupo string valorgrupo = string.IsNullOrWhiteSpace(grupo) ? ExportAttribute.GRUPO_DEFAULT : grupo; var workbook = CrearLibro <T>(datos, tipoExportacion, valorgrupo); log.Debug(string.Format("CrearLibro:{0}|{1}", totalMemoriaInicial.ToString(), sw.Elapsed.ToString())); var output = new MemoryStream(); workbook.Write(output); log.Debug(string.Format("WriteOutput:{0}|{1}", totalMemoriaInicial.ToString(), sw.Elapsed.ToString())); // long totalMemoriaFinal = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / 1024; GC.Collect(); long totalMemoriaReducida = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64 / 1024; log.Debug(string.Format("Fin:{0}|{1}|{2}", totalMemoriaFinal.ToString(), totalMemoriaReducida.ToString(), sw.Elapsed.ToString())); return(output); }
public static MemoryStream Exportar <T>(IEnumerable <T> datos, TipoExportacion tipoExportacion) { return(Exportar <T>(datos, tipoExportacion, null)); }
private static IWorkbook AgregarDatos <T>(IWorkbook wb, IEnumerable <T> datos, TipoExportacion tipoexportacion, string grupo) { //Recuperar la hoja de exportación - Se asume que siempre trabajamos con la primera hoja ISheet sheet = wb.GetSheetAt(0); IRow fila; ICell celda; FabricaEstilos fabricaEstilos = new FabricaEstilos(estilosHistoricos); //Obtener la siguiente fila disponible, sino es la primera dejar dos espacios al medio var ultimaFila = sheet.LastRowNum; ultimaFila = ultimaFila != 0 ? ultimaFila + 2 : 0; //Inicializamos la lista de columnas a exportar var columnasExportar = LeerAtributos(typeof(T)); //En caso haya columnas para exportar continuamos if (columnasExportar.Any()) { //Inicializamos el ancho de las columnas solo si es la primera exportación de datos if (ultimaFila == 0) { foreach (var item in columnasExportar) { if (item.Grupo.Contains(grupo)) { sheet.SetColumnWidth(item.Orden, item.Tamanio * 256); } } } //Llena la cabecera fila = sheet.CreateRow(ultimaFila); foreach (var columna in columnasExportar.OrderBy(x => x.Orden)) { if (columna.Grupo.Contains(grupo)) { celda = fila.CreateCell(columna.Orden); celda.SetCellValue(columna.Cabecera); if (tipoexportacion == TipoExportacion.ExcelCabeceras) { celda.CellStyle = (HSSFCellStyle)fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Cabecera); //Actualizamos los estilos históricos estilosHistoricos = fabricaEstilos.Estilos; } } } //Agregar las filas de datos var secuencia = ultimaFila + 1; foreach (var registro in datos) { fila = sheet.CreateRow(secuencia++); foreach (var columna in columnasExportar.OrderBy(x => x.Orden)) { if (columna.Grupo.Contains(grupo)) { EscribirCelda(wb, fila, columna, registro); } } } } return(wb); }
public List<TipoExportacion> ObtenerTiposDeExportacion( Autorizacion aut ) { ClsFEXAuthRequest feAutRequest = this.wa.ConvertirFex( aut ); FEXResponse_Tex conceptos = this.wsfe.FEXGetPARAM_Tipo_Expo( feAutRequest ); this.managerErrores.CapturarError( conceptos.FEXErr ); List<TipoExportacion> tiposExportacion = new List<TipoExportacion>(); TipoExportacion exportacion; foreach ( ClsFEXResponse_Tex comp in conceptos.FEXResultGet ) { exportacion = new TipoExportacion(); exportacion.Id = comp.Tex_Id; exportacion.Descripcion = comp.Tex_Ds; tiposExportacion.Add( exportacion ); } return tiposExportacion; }