c# asp.net asp.net-mvc epplus

c# - ASP.NET MVC EPPlus Descargar archivo de Excel



asp.net-mvc (1)

Esto es lo que estoy usando. He estado usando esto por varios meses y no he tenido ningún problema:

public ActionResult ChargeSummaryData(ChargeSummaryRptParams rptParams) { var fileDownloadName = "sample.xlsx"; var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; var package = CreatePivotTable(rptParams); var fileStream = new MemoryStream(); package.SaveAs(fileStream); fileStream.Position = 0; var fsr = new FileStreamResult(fileStream, contentType); fsr.FileDownloadName = fileDownloadName; return fsr; }

Una cosa que noté de inmediato es que no restableces la posición de la secuencia de archivos a 0.

Así que estoy usando la elegante biblioteca EPPlus para escribir un archivo de Excel y enviarlo al usuario para que lo descargue. Para el siguiente método, solo estoy usando algunos datos de prueba para minimizar el código, luego agregaré el código que estoy usando para conectarme a la base de datos más tarde. Ahora puedo descargar un archivo todo bien, pero cuando voy a abrir el archivo, Excel se queja de que no es un archivo válido y podría estar dañado. Cuando voy a mirar el archivo, dice que es 0KB grande. Entonces mi pregunta es, ¿a dónde me voy mal? Estoy asumiendo que es con el MemoryStream. No he trabajado mucho con secuencias antes, así que no estoy exactamente seguro de qué usar aquí. ¡Cualquier ayuda sería apreciada!

[Authorize] public ActionResult Download_PERS936AB() { ExcelPackage pck = new ExcelPackage(); var ws = pck.Workbook.Worksheets.Add("Sample1"); ws.Cells["A1"].Value = "Sample 1"; ws.Cells["A1"].Style.Font.Bold = true; var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect); shape.SetPosition(50, 200); shape.SetSize(200, 100); shape.Text = "Sample 1 text text text"; var memorystream = new MemoryStream(); pck.SaveAs(memorystream); return new FileStreamResult(memorystream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "PERS936AB.xlsx" }; }