Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC-从MemoryStream下载Excel文件(损坏的文件)_C#_Asp.net_Asp.net Mvc_Excel - Fatal编程技术网

C# ASP.NET MVC-从MemoryStream下载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文件的,因为这是不相关的(在使用内存流之前它工作得很好) 我认为应该返回字节数组而不是流。尝试使用

我正在尝试使用内置浏览器下载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");