C# Excel导出(xlsx)错误,类型为';System.OutOfMemoryException';被抛出
在从ASP.Net导出.xlsx文件时,我遇到System.OutOfMemoryException。在将数据写入内存流时发生这种情况C# Excel导出(xlsx)错误,类型为';System.OutOfMemoryException';被抛出,c#,asp.net,excel,memorystream,closedxml,C#,Asp.net,Excel,Memorystream,Closedxml,在从ASP.Net导出.xlsx文件时,我遇到System.OutOfMemoryException。在将数据写入内存流时发生这种情况 protected void ExportExcel(string strWorkbookName, DataTable dt) { try { dt.TableName = strWorkbookName; using (XLWorkbook wb = new XLWorkbook()) {
protected void ExportExcel(string strWorkbookName, DataTable dt)
{
try
{
dt.TableName = strWorkbookName;
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(dt);
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=" + strWorkbookName + ".xlsx");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(Response.OutputStream);
Response.Flush();
//HttpContext.Current.Response.SuppressContent = true; // Gets or sets a value indicating whether to send HTTP content to the client.
//HttpContext.Current.ApplicationInstance.CompleteRequest();
Response.End();
}
}
}
catch (Exception ex)
{
string errorMessage = string.Empty;
throw ex;
}
}
第wb.SaveAs(MyMemoryStream)行出现异常代码>
XLWorkbook
类属于ClosedXML.dll,v0.69.1.0用于导出excel的库
参考:
有人知道吗
如何解决这个问题?几年前,我编写了一个“导出到Excel”C#类,在处理大型数据集时遇到了同样的问题
解决方案是使用OpenXmlWriter
库,这样在将整个Excel文件写入文件之前,您的代码不会试图将其放在内存中
在您的示例中,只需将您的数据表,dt
,并将其传递给我的库,问题就消失了。您将拥有一个真正的.xlsx文件,它是使用Microsoft的OpenXML库创建的
try
{
dt.TableName = strWorkbookName;
CreateExcelFile.CreateExcelDocument(dt, "YourExcelFilename.xlsx");
}
catch (Exception ex)
{
// Handle any execptions..
}
或者,在ASP.Net应用程序中包含此文件时,您可以让我的库将Excel文件直接保存到页面的响应中:
CreateExcelFile.CreateExcelDocument(dt, "YourExcelFilename.xlsx", Response);
我的源代码可在此处免费下载:
您的数据表有多大?通过执行此操作,页面将获得刷新,不会下载任何数据。设置断点,确保“dt”确实包含一些数据,然后再调用我的C#library。我已确认它有21321行和18列