none
Ayuda con método de Exportación usando ClosedXML RRS feed

  • Pregunta

  • que tal amigo resulta que tengo un método que recibe  1 modelo y que me devuelve los registros de una consulta 

    public ActionResult Index(Search Model)
            {
    
                var Ofertas = db.Mofertas
                              .Include(i => i.DOFERTAS)
                              .Include(i => i.MREQUERIMIENTO)
                              .Include(i => i.MPROVEEDOR)
                              .OrderByDescending(l => l.MPROVEEDOR.RAZON_SOCIAL)
                              .ToList();
    
    
    
                if (Model.LICITACIONID != 0)
                {
                    Ofertas = Ofertas
                        .Where(l => l.LICITACIONID == (int)Model.LICITACIONID)
                        .ToList();
                }
    
                if (Model.PROVEEDORID != 0)
                {
                    Ofertas = Ofertas
                        .Where(l => l.MPROVEEDORID == (int)Model.PROVEEDORID)
                        .ToList();
                }
    
    
    
                var pageIndex = Model.Page ?? 1;
                Model.ListOfertas = Ofertas
                                    .OrderByDescending(l => l.LICITACION)
                                    .OrderBy(p => p.MPROVEEDOR.RAZON_SOCIAL)
                                    .ToPagedList(pageIndex, 30);
    
    
                var resultado = (from Prov in db.Mofertas.Include(m => m.MPROVEEDORID)
                         .Where(n => n.LICITACIONID == Model.LICITACIONID)
                                 select new
                                 {
                                     MPROVEEDORID = Prov.MPROVEEDORID,
                                     RAZON_SOCIAL = Prov.MPROVEEDOR.RAZON_SOCIAL,
                                 }).Distinct().OrderBy(c => c.RAZON_SOCIAL);
    
    
    
                List<MPROVEEDOR> parts = new List<MPROVEEDOR>();
    
                parts.Add(new MPROVEEDOR
                {
                    MPROVEEDORID = 0,
                    RAZON_SOCIAL = "[TODOS]",
                });
    
                foreach (var item in resultado)
                {
                    parts.Add(new MPROVEEDOR() { MPROVEEDORID = item.MPROVEEDORID, RAZON_SOCIAL = item.RAZON_SOCIAL });
                }
    
    
                ViewBag.PROVEEDORID = parts;
    
    
    
                return View(Model);
            }

    Ahora la pregunta es como puedo hacer para recargar ese método y poder utilizarlo para poder exportar la consulta realizada, quiero usar Closedxml, hice una prueba de la siguiente manera y exporta la información como deseo, la cuestion es.

    1.- como pasarle el modelo  con las  condiciones de busqueda

    2.- como solicitarle al usurio la ruta donde desea el archivo porque ahora con este codigo solo lo pone en la unidad cdel equipo.

      public ActionResult ExportarExcel()
            {
                try
                {
                    var wb = new XLWorkbook();
                    var ws = wb.Worksheets.Add("Propuesta Tecnico-Economica");
    
    
                    var items =
                                from MOFER in db.Mofertas
                                join MPROV in db.MProveedor on MOFER.MPROVEEDORID equals MPROV.MPROVEEDORID
                                join MREQ in db.Mrequerimiento on MOFER.MREQUERIMIENTOID equals MREQ.MREQUERIMIENTOID
                                join DOFER in db.DOfertas on MOFER.MOFERTAID equals DOFER.MOFERTAID
                                join LIC in db.Licitacion on MOFER.LICITACIONID equals LIC.LICITACIONID
                                where (MOFER.LICITACIONID > 0) && (MOFER.MPROVEEDORID > 0)
                                select new
                                {
                                    MOFERTAID = MOFER.MOFERTAID,
                                    Partida = MOFER.PARTIDA,
                                    Gpo = MOFER.GPO,
                                    Gen = MOFER.GEN,
                                    Esp = MOFER.ESP,
                                    Dif = MOFER.DIF,
                                    Var = MOFER.VAR,
                                    Descripcion = MREQ.DESCRIPCION,
                                    Licitante = MPROV.RAZON_SOCIAL,
                                    Rfc_Licitante = MPROV.RFC_PROVEEDOR,
                                    PRECIO_OFERTADO = MOFER.PRECIO_OFERTADO,
                                    Descuento = MOFER.DESCUENTO,
                                    Cantidad_Maxima = MOFER.CANT_MAX,
                                    Cantidad_Minima = MOFER.CANT_MIN,
                                    Marca = DOFER.MARCA,
                                    Registro_Sanitario = DOFER.REGISTROSA,
                                    Oficio_Exime = DOFER.OFICIO_EXIME,
                                    Tramite_Inclusion = DOFER.TRAMITE_INCLUSION,
                                    Titular_Registro = DOFER.TITULAR_REGISTRO,
                                    Rfc_Titular = DOFER.RFC_TITULAR_REGISTRO,
                                    Fabricante = DOFER.RFC_FABRICANTE,
                                    Rfc_Fabricante = DOFER.RFC_FABRICANTE
                                };
    
                    ws.Cell("A1").Value = "Ofertas recibidas en la licitacion:";
                    ws.Range("A2").Merge().AddToNamed("Titles");
                    var tableWithPeople = ws.Cell(2, 1).InsertTable(items.AsEnumerable());
    
                    
                    var titlesStyle = wb.Style;
                    titlesStyle.Font.Bold = true;
                    titlesStyle.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                    titlesStyle.Fill.BackgroundColor = XLColor.Cyan;
                    
    
                    
                    for (var Fila = 1; Fila < 10; Fila++)
                    {
    
                        ws.Cell("k" + Fila).Style.NumberFormat.Format = "#,##0";
                        ws.Cell("L" + Fila).Style.NumberFormat.Format = "#,##0";
                        ws.Cell("m" + Fila).Style.NumberFormat.SetFormat("#,##0");
                        ws.Cell("n" + Fila).Style.NumberFormat.SetFormat("#,##0");                    
    
                       
                    }
    
                    ws.Columns().AdjustToContents();
                    
                    wb.SaveAs("c:\\Ofertas.xlsx");
    
    
                    return View();
    
    
                }
                catch (Exception)
                {
    
                    throw;
                }
            }

    Podrían Echarme una mano. 

    Muchas Gracias.


    Horacio Xochitemol Bautista

    lunes, 31 de octubre de 2016 17:55

Respuestas

  • Hola, antes de return View(luego lo eliminas) puedes hacer lo siguiente

    byte[] filedata = System.IO.File.ReadAllBytes(filepath);
    string contentType = MimeMapping.GetMimeMapping(filepath);
    
        var cd = new System.Net.Mime.ContentDisposition
        {
            FileName = filename,
            Inline = true,
        };
    
        Response.AppendHeader("Content-Disposition", cd.ToString());
    
        return File(filedata, contentType);
    


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 31 de octubre de 2016 19:24
    Moderador