ASP.NET MVC EPPlus下载Excel文件

所以我正在使用花哨的EPPlus库来编写Excel文件并将其输出给用户下载。 对于以下方法,我只是使用一些测试数据来最小化代码,然后我将添加我用于以后连接到数据库的代码。 现在我可以下载一个文件了,但是当我打开文件时,Excel会抱怨它不是一个有效的文件而且可能已损坏。 当我去查看文件时,它说它大了0KB。 所以我的问题是,我哪里错了? 我假设它与MemoryStream有关。 之前没有做过很多关于流的工作,所以我不确定在这里使用什么。 任何帮助,将不胜感激!

[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" }; } 

这是我正在使用的 – 我已经使用了几个月了,并没有遇到问题:

 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; } 

我注意到的一件事就是你没有将文件流位置重置为0。