C# 从ASP.NET MVC创建打开的XML excel工作表时出错
我正在尝试使用OpenXMLSDK2.5从ASP.NETMVC4导出Excel工作表。我尝试使用MSDN中的标准示例C# 从ASP.NET MVC创建打开的XML excel工作表时出错,c#,asp.net,asp.net-mvc,asp.net-mvc-4,openxml-sdk,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Openxml Sdk,我正在尝试使用OpenXMLSDK2.5从ASP.NETMVC4导出Excel工作表。我尝试使用MSDN中的标准示例 extention = "xlsx"; response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; response.AddHeader("Content-Disposition",String.Format("attachment; filename={0
extention = "xlsx";
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
response.AddHeader("Content-Disposition",String.Format("attachment; filename={0}.{1}", fileName, extention));
using (MemoryStream mem = new MemoryStream())
{
// Create a spreadsheet document by supplying the filepath.
// By default, AutoSave = true, Editable = true, and Type = xlsx.
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(mem, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document.
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
// Add a WorksheetPart to the WorkbookPart.
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
// Add Sheets to the Workbook.
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet()
{
Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "mySheet"
};
sheets.Append(sheet);
workbookpart.Workbook.Save();
// Close the document.
spreadsheetDocument.Close();
mem.CopyTo(response.OutputStream);
}
extention=“xlsx”;
response.ContentType=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”;
AddHeader(“内容处置”,String.Format(“附件;文件名={0}.{1}”,文件名,扩展名));
使用(MemoryStream mem=new MemoryStream())
{
//通过提供文件路径创建电子表格文档。
//默认情况下,AutoSave=true、Editable=true和Type=xlsx。
SpreadsheetDocument SpreadsheetDocument=SpreadsheetDocument.Create(mem,SpreadsheetDocumentType.工作簿);
//将工作簿部件添加到文档中。
WorkbookPart WorkbookPart=电子表格文档.AddWorkbookPart();
workbookpart.工作簿=新工作簿();
//将工作表部件添加到工作簿部件。
WorksheetPart WorksheetPart=workbookpart.AddNewPart();
worksheetPart.Worksheet=新工作表(new SheetData());
//将工作表添加到工作簿中。
Sheets Sheets=spreadsheetDocument.WorkbookPart.Workbook.AppendChild(新工作表());
//附加新工作表并将其与工作簿关联。
图纸=新图纸()
{
Id=电子表格文档.WorkbookPart.GetIdOfPart(工作表部分),
SheetId=1,
Name=“mySheet”
};
附页(页);
workbookpart.Workbook.Save();
//关闭文档。
电子表格文档。关闭();
mem.CopyTo(response.OutputStream);
}
我的文件正在下载,但当我试图打开它时,excel弹出的一个错误表明该文件已损坏。当我用记事本或记事本++打开文件时,文件是完全空的,里面没有xml数据
我遗漏了什么,需要做什么
提前感谢。在将内存流位置复制到响应之前,请尝试将其重置为零:
// Close the document.
spreadsheetDocument.Close();
mem.Position = 0;
mem.CopyTo(response.OutputStream);
除了将内存流复制到响应之外,您还可以从MVC操作返回FileStreamResult
:
public ActionResult XlsDocument()
{
// generating your document here...
// very important to reset memory stream to a starting position, otherwise you would get 0 bytes returned
memoryStream.Position = 0;
var resultStream = new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";);
resultStream.FileDownloadName = String.Format("{0}.{1}", fileName, extension);
return resultStream;
}
之后你在调用response.Flush()吗?是的,我在调用Flush。就像trailmax提到的,问题在于寻找。