Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public static MemoryStream Exportar <T>(IEnumerable <T> datos, TipoExportacion tipoExportacion)
 {
     return(Exportar <T>(datos, tipoExportacion, null));
 }
Ejemplo n.º 4
0
        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;
        }