【问题标题】:Excel export (xlsx) error Exception of type 'System.OutOfMemoryException' was thrownExcel 导出 (xlsx) 错误“System.OutOfMemoryException”类型的异常被抛出
【发布时间】:2016-03-09 10:55:39
【问题描述】:

我在从 ASP .Net 导出 .xlsx 文件时遇到 System.OutOfMemoryException,这是在将数据写入内存流时发生的。

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,用于导出 excel 的 v0.69.1.0 库。

参考:https://closedxml.codeplex.com/

有人知道吗!?!

如何解决?

【问题讨论】:

  • 你的数据表有多大?

标签: c# asp.net excel memorystream closedxml


【解决方案1】:

几年前,我编写了一个“导出到 Excel”C# 类,在处理大型数据集时遇到了同样的问题。

解决方案是使用 OpenXmlWriter 库,因此您的代码不会尝试将整个 Excel 文件放在内存中,然后再将其写入文件。

在您的示例中,只需将您的 DataTable dt 传递给我的库,问题就会消失。您将拥有一个使用 Microsoft 的 OpenXML 库创建的真实 .xlsx 文件。

try
{
    dt.TableName = strWorkbookName;
    CreateExcelFile.CreateExcelDocument(dt, "YourExcelFilename.xlsx");
}
catch (Exception ex)
{
    //  Handle any execptions..
}

或者,当您将其包含在 ASP.Net 应用程序中时,您可以让我的库将 Excel 文件直接保存到您页面的响应中:

CreateExcelFile.CreateExcelDocument(dt, "YourExcelFilename.xlsx", Response);

我的源代码可以在这里下载(免费):

Export to Excel

【讨论】:

  • 通过刷新此页面不会下载任何数据。
  • 设置断点,在调用我的 C# 库之前确保“dt”确实包含一些数据。
  • 我已经确认它有 213221 行和 18 列
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多