ASP.NET MVC – 从MemoryStream下载Excel文件(损坏的文件)

我正在尝试使用浏览器中的内部下载来下载Excel文件。 基本上下载工作正常后,我已经创build了我的控制器中的Excel文件,但是当我试图在Excel中打开此文件时,我被告知该文件已损坏:

Excel无法打开文件“Report.xlsx”,因为文件格式或文件扩展名无效。 validation该文件是否已损坏,文件扩展名是否与该文件的格式匹配。

当强制文件在Excel中打开时,工作表就是空的。 我不知道这是为什么,并希望任何可能的帮助。

我没有展示如何创buildExcel文件,因为这是不相关的( 它使用内存stream之前工作正常 )。

var stream = wBook.WriteXLSX(); // Return a MemoryStream (Using DTG.Spreadsheet) return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx"); 

您应该将当前stream位置设置为0以成功导出文件。

 var stream = wBook.WriteXLSX(); // Return a MemoryStream (Using DTG.Spreadsheet) stream.Seek(0, SeekOrigin.Begin); return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx"); 

我认为你应该返回字节数组而不是stream。 尝试使用这种方法。 (这个例子使用ClosedXML)

  byte[] xlsInBytes; using (MemoryStream ms = new MemoryStream()) { workbook.SaveAs(ms); xlsInBytes = ms.ToArray(); } return File(xlsInBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx");