我正在尝试使用浏览器中的内置下载进行Excel文件下载。在我在控制器中创建Excel文件后,基本上下载工作正常,但是当我尝试在Excel中打开此文件时,我被告知该文件已损坏:
Excel无法打开“Report.xlsx”文件,因为文件格式或文件扩展名无效。验证文件是否已损坏,以及文件扩展名是否与文件格式匹配。
强制文件在Excel中打开时,工作表只是空的。我不知道为什么会这样。
代码
我没有展示我是如何创建Excel文件的,因为这是无关紧要的(在使用内存流之前它工作正常)。
var stream = wBook.WriteXLSX(); // Return a MemoryStream (Using DTG.Spreadsheet)
return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx");
答案 0 :(得分:12)
您应将当前流位置设置为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");
答案 1 :(得分:3)
我认为你应该返回字节数而不是流。尝试使用这种方法。 (此示例使用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");