none
MVC C# Excel a partir de base de datos (ExcelPackage) RRS feed

  • Pregunta

  • Hola,

    en mi aplicación con mvc, recojo los datos de una BD tras realizar unas query y como resultado, tengo la opción de generar un Excel.

    Además de este Excel con los datos ordenados y agrupados de una forma específica, quiero que en el mismo documento, se me cree otra PESTAÑA pero con los datos agrupados y ordenados según otras características. Este proceso es automático, quiero decir, el usuario no tiene la opción de crear el Excel de una u otra forma. El Excel se deberá generar con las dos pestañas.

    ¿Me explico?

    He copidado el codigo por si alguien tiene el mismo problema/duda.

    Un saludo

     public FileResult GenerarExcel(string usuario, DateTime? fechadesde, DateTime? fechahasta, string proyecto, EnumsAppNameIncidemcias departamento = EnumsAppNameIncidemcias.NoDefinido)
            {
                //var lista_usuarios = usuario.Split(',').ToList();
                var partes = db.ParteHorasIncidenciasAvenir.AsQueryable();

                if (!String.IsNullOrEmpty(usuario))
                {
                    partes = partes.Where(c => c.Nom_Usuario.Contains(usuario));
                }
                if (fechadesde.HasValue && fechahasta.HasValue)
                {
                    partes = partes.Where(c => c.Fecha >= fechadesde.Value && c.Fecha <= fechahasta.Value);
                }
                if (!departamento.CompararConEnum(EnumsAppNameIncidemcias.Todos) && !departamento.CompararConEnum(EnumsAppNameIncidemcias.NoDefinido))
                {
                    partes = partes.Where(c => c.Nom_Dep == departamento.ToCodigo());
                }
                if (!String.IsNullOrEmpty(proyecto))
                {
                    partes = partes.Where(c => c.Proyecto == proyecto);
                }

                var listapartes = partes.ToList();

                using (ExcelPackage pck = new ExcelPackage())
                {
                    var partesAgrupados = listapartes.GroupBy(c => c.Nom_Dep);

                    foreach (var parteagrupado in partesAgrupados)
                    {

                        //Create the worksheet
                        ExcelWorksheet ws = pck.Workbook.Worksheets.Add(parteagrupado.Key);
                        ws.Cells["A1"].Value = "Fecha";
                        ws.Cells["B1"].Value = "Nombre";
                        ws.Cells["C1"].Value = "Unidad de Negocio";
                        ws.Cells["D1"].Value = "Proyecto";
                        ws.Cells["E1"].Value = "Tarea";
                        ws.Cells["F1"].Value = "Descripcion";
                        ws.Cells["G1"].Value = "Minutos";
                        ws.Cells["H1"].Value = "Vinculado a Incidencia";


                        //Format the header for column 1-3
                        using (ExcelRange rng = ws.Cells["A1:H1"])
                        {
                            rng.Style.Font.Bold = true;
                            rng.Style.Fill.PatternType = ExcelFillStyle.Solid;                      //Set Pattern for the background to Solid
                            rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79, 129, 189));  //Set color to dark blue
                            rng.Style.Font.Color.SetColor(Color.White);
                        }


                        var parteagrupadoOrdenado = parteagrupado.OrderByDescending(c => c.Fecha).ThenBy(c => c.Nom_Usuario);
                        var i = 2;
                        foreach (var l in parteagrupadoOrdenado)
                        {
                            ws.Cells["A" + i].Value = l.Fecha.ToShortDateString();
                            ws.Cells["B" + i].Value = l.Nom_Usuario;
                            ws.Cells["C" + i].Value = l.Nom_Dep;
                            ws.Cells["D" + i].Value = l.Proyecto;
                            ws.Cells["E" + i].Value = l.Tarea;
                            ws.Cells["F" + i].Value = l.Descripción;
                            ws.Cells["G" + i].Value = l.Minutos;
                            ws.Cells["H" + i].Value = l.id_I;

                            i++;
                        }
                    }                   

                        //Write it back to the client
                        // Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                        //Response.AddHeader("content-disposition", "attachment;  filename=ParteIncidencias.xlsx");

                        var memoryStream = pck.GetAsByteArray();
                        var fileName = "ParteHorasOrdenado.xlsx";
                        return base.File(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
                }

    }



    martes, 14 de mayo de 2013 13:19