C# ASP.NET MVC-从MemoryStream下载Excel文件(损坏的文件)
我正在尝试使用内置浏览器下载Excel文件。基本上,在我在控制器中创建Excel文件后,下载工作正常,但当我尝试在Excel中打开此文件时,我被告知该文件已损坏: Excel无法打开文件“Report.xlsx”,因为文件格式或文件扩展名无效。验证文件是否已损坏,以及文件扩展名是否与文件格式匹配 在Excel中强制打开文件时,工作表只是空的。我不知道这是为什么 代码 我没有展示我是如何创建Excel文件的,因为这是不相关的(在使用内存流之前它工作得很好)C# ASP.NET MVC-从MemoryStream下载Excel文件(损坏的文件),c#,asp.net,asp.net-mvc,excel,C#,Asp.net,Asp.net Mvc,Excel,我正在尝试使用内置浏览器下载Excel文件。基本上,在我在控制器中创建Excel文件后,下载工作正常,但当我尝试在Excel中打开此文件时,我被告知该文件已损坏: Excel无法打开文件“Report.xlsx”,因为文件格式或文件扩展名无效。验证文件是否已损坏,以及文件扩展名是否与文件格式匹配 在Excel中强制打开文件时,工作表只是空的。我不知道这是为什么 代码 我没有展示我是如何创建Excel文件的,因为这是不相关的(在使用内存流之前它工作得很好) 我认为应该返回字节数组而不是流。尝试使用
我认为应该返回字节数组而不是流。尝试使用这种方法。(本例使用ClosedXML)
您应该将当前流位置设置为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");
请显示
WriteXLSX
的代码。我猜您返回的流位于末尾,您只需添加stream.Position=0
在WriteXLSX
中-但正如Alexander所说,我们不能不看它就知道。WriteXLSX
是图书馆的一种方法,这是为我做的。感谢您的帮助。@Detilium我可以知道您在这行wBook.WriteXLSX()中使用了什么dll吗?@AljohnYamaro我很确定这是一个。虽然自从耶稣基督诞生已经两年多了,但这只虫子困扰了我一个星期。我不知道我怎么直到现在才看到这个答案,但它对我起了作用。谢谢你,伙计。
byte[] xlsInBytes;
using (MemoryStream ms = new MemoryStream())
{
workbook.SaveAs(ms);
xlsInBytes = ms.ToArray();
}
return File(xlsInBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx");
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");