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; }
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); }