Saltar al contenido

Descargar archivo con ClosedXML

Si encuentras alguna parte que no entiendes nos puedes dejar un comentario y haremos todo lo necesario de ayudarte tan rápido como podamos.

El SaveAs() El método admite la transmisión, por lo que para obtener el libro de trabajo ClosedXml como una transmisión, uso:

public Stream GetStream(XLWorkbook excelWorkbook)

    Stream fs = new MemoryStream();
    excelWorkbook.SaveAs(fs);
    fs.Position = 0;
    return fs;

Y luego para descargar el archivo:

string myName = Server.UrlEncode(ReportName + "_" + DateTime.Now.ToShortDateString() + ".xlsx");
MemoryStream stream = GetStream(ExcelWorkbook);

Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment; filename=" + myName);
Response.ContentType = "application/vnd.ms-excel";
Response.BinaryWrite(stream.ToArray());
Response.End();

Hilo antiguo, pero no pude lograr que la solución aceptada funcionara correctamente. Algunas búsquedas más dieron con esto, que funcionó muy bien para mí:

        // Create the workbook
        XLWorkbook workbook = new XLWorkbook();
        workbook.Worksheets.Add("Sample").Cell(1, 1).SetValue("Hello World");

        // Prepare the response
        HttpResponse httpResponse = Response;
        httpResponse.Clear();
        httpResponse.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        httpResponse.AddHeader("content-disposition", "attachment;filename="HelloWorld.xlsx"");

        // Flush the workbook to the Response.OutputStream
        using (MemoryStream memoryStream = new MemoryStream())
        
            workbook.SaveAs(memoryStream);
            memoryStream.WriteTo(httpResponse.OutputStream);
            memoryStream.Close();
        

        httpResponse.End();

La descarga se puede hacer algo más simple y corta, por lo que la acción completa en su controlador podría verse así: la parte de descarga es solo una línea en lugar de siete a diez

public ActionResult XLSX()

    System.IO.Stream spreadsheetStream = new System.IO.MemoryStream();
    XLWorkbook workbook = new XLWorkbook();
    IXLWorksheet worksheet = workbook.Worksheets.Add("example");
    worksheet.Cell(1, 1).SetValue("example");
    workbook.SaveAs(spreadsheetStream);
    spreadsheetStream.Position = 0;

    return new FileStreamResult(spreadsheetStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")  FileDownloadName = "example.xlsx" ;

Si estás contento con lo expuesto, puedes dejar un tutorial acerca de qué le añadirías a esta sección.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *