示例#1
0
        private static void EscribirCelda(IWorkbook wb, IRow fila, ExportarColumnasInfo columna, object dato)
        {
            var  fabricaEstilos  = new FabricaEstilos(estilosHistoricos);
            var  celda           = fila.CreateCell(columna.Orden);
            bool esPersonalizado = !string.IsNullOrEmpty(columna.Formato);

            switch (columna.Propiedad.PropertyType.Name)
            {
            case "Decimal":
                celda.SetCellValue(Convert.ToDouble(columna.Propiedad.GetValue(dato, null)));
                celda.CellStyle = esPersonalizado ?
                                  fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Personalizado, columna.Formato, columna.Alineamiento)
                        :celda.CellStyle = fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Decimal);
                break;

            case "Double":
                celda.SetCellValue(Convert.ToDouble(columna.Propiedad.GetValue(dato, null)));
                celda.CellStyle = esPersonalizado ?
                                  fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Personalizado, columna.Formato, columna.Alineamiento)
                        :celda.CellStyle = fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Decimal);
                break;

            case "DateTime":
                celda.SetCellValue(Convert.ToDateTime(columna.Propiedad.GetValue(dato, null)));
                if (celda.ToString().CompareTo("-1") == 0)
                {
                    celda.SetCellValue("");
                }
                celda.CellStyle = esPersonalizado ?
                                  fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Personalizado, columna.Formato, columna.Alineamiento)
                        :celda.CellStyle = fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Fecha);
                break;

            case "Int32":
                celda.SetCellValue(Convert.ToInt32(columna.Propiedad.GetValue(dato, null)));
                celda.CellStyle = esPersonalizado ?
                                  fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Personalizado, columna.Formato, columna.Alineamiento)
                        :celda.CellStyle = fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Centro);
                break;

            case "int":
                celda.SetCellValue(Convert.ToInt32(columna.Propiedad.GetValue(dato, null)));
                celda.CellStyle = esPersonalizado ?
                                  fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Personalizado, columna.Formato, columna.Alineamiento)
                        :celda.CellStyle = fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Centro);
                break;

            default:
                celda.SetCellValue(Convert.ToString(columna.Propiedad.GetValue(dato, null)));
                celda.CellStyle = esPersonalizado ?
                                  fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Personalizado, columna.Formato, columna.Alineamiento)
                        : fabricaEstilos.obtenerCellStyle(wb, TipoCellStyle.Izquierda);
                break;
            }

            //Actualizamos los estilos históricos
            estilosHistoricos = fabricaEstilos.Estilos;
        }
示例#2
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);
        }