Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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# Excel导出(xlsx)错误,类型为';System.OutOfMemoryException';被抛出_C#_Asp.net_Excel_Memorystream_Closedxml - Fatal编程技术网

C# Excel导出(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()) {

在从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,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列