none
exportar a Excel RRS feed

  • Pregunta

  • Buenas tardes a la comunidad,

    Tengo una pregunta para hacer a ver si alguien me puede dar una solucion. 

    TEngo que hacer una exportación a excel entonces he elegido hacerla con ClosedXML, el tema es que lo llamo desde una llamada ajax desde javascript pero al retornar no me hace la descarga del fichero. os paso el codigo a ver donde me he equivocado. 

    y si a alguien se le ocurre algo mejor bienvenido sea.

    Codigo Javascript

            

     function Exportar(years)

        {

            if (years == '')
                years = $("#lblYear").val();

            $("p#pYear").text(" Reporte Apple año " + years);
            var sku = $('#txtSKU').val();
            var version = $('#txtVersion').val();
            var beginDate = $('#txtBeginDate').val();
            var endDate = $('#txtEndDate').val();

            var params = {};
            params.sku = sku;
            params.version = version;
            params.beginDate = beginDate;
            params.endDate = endDate;
            params.years = years
            params.max = $("#txtCantReg").val();
            var objeto = JSON.stringify(params)
            var url = '/Administration/Exportar';
            $.ajax({
                url: url,
                type: 'POST',
                data: objeto,            
                contentType: "application/json;chartset=utf-8",
                statusCode: {
                    200: function (data) {
                        alert('Se ha exportado con exito');
                        alert(data.getAllResponseHeaders());
                        return data;

                    },
                    400: function () {
                        //  ClearForm();
                        alert('Error');
                    }
                }
            });

        }


    ********************** codigo en MVC *******************

     <a href="#" class="button" onclick="javascript:Exportar('');" >   Exportar a Excel   </a> 

    ************** CODIGO EN EL CONTROLADOR **********************
        [HttpPost]
            public ActionResult  Exportar(string sku, string version, string beginDate, string endDate, string years, string max)
            {
                // Generate the workbook...
                var workbook = ClosedXmlDemoGenerator.GenerateWorkBook();

                // ... and return it to the client
                return new ExcelResult(workbook, "demo");

            }

    ******************************* CODIGO EN OTRA CLASE ****************************************************************
        public class ExcelResult : ActionResult
        {
            private readonly XLWorkbook _workbook;
            private readonly string _fileName;

            public ExcelResult(XLWorkbook workbook, string fileName)
            {
                _workbook = workbook;
                _fileName = fileName;
            }

            public override void ExecuteResult(ControllerContext context)
            {
                var response = context.HttpContext.Response;
                response.Clear();
                response.ContentType = "application/vnd.openxmlformats-officedocument."
                                     + "spreadsheetml.sheet";
                response.AddHeader("content-disposition",
                                   "attachment;filename=\"" + _fileName + ".xlsx\"");

                using (var memoryStream = new MemoryStream())
                {
                    _workbook.SaveAs(memoryStream);
                    memoryStream.WriteTo(response.OutputStream);
                }
                response.End();
            }
        }


        public class ClosedXmlDemoGenerator
        {
            public static XLWorkbook GenerateWorkBook()
            {
                var workbook = new XLWorkbook();
                var worksheet = workbook.Worksheets.Add("Invoice");

                // Header
                worksheet.Cell("A1").Value = "ID";
                worksheet.Cell("B1").Value = "Description";
                worksheet.Cell("C1").Value = "Quantity";
                worksheet.Cell("D1").Value = "Unit price";
                worksheet.Range("A1:D1")
                         .Style.Font.SetBold(true)
                         .Font.SetFontSize(14)
                         .Fill.SetBackgroundColor(XLColor.LightGray);




                worksheet.Columns().AdjustToContents();
                return workbook;
            }
        }
    }

    lunes, 26 de enero de 2015 13:41

Respuestas

Todas las respuestas