0

使用EPPlus库从数据表生成 excel时出现错误

System.ObjectDisposedException:包对象已关闭并释放,因此无法对此对象或在此包的一部分上打开的任何流执行操作。

我在这里搜索并发现该GetAsByteArray()函数处理了包对象。请帮助克服这一点。

private void DumpExcel(DataTable tbl)
{
    using (ExcelPackage pck = new ExcelPackage())
    {

        //Create the worksheet
        ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");

        //Load the datatable into the sheet, starting from cell A1. 
        //Print the column names on row 
        ws.Cells["A1"].LoadFromDataTable(tbl, true);


        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();

        Response.AddHeader("content-disposition", "attachment;  filename=ExcelDemo.xlsx");
        Response.AddHeader("content-type", "application/Excel");
        Response.ContentType = "application/vnd.xls";
        Response.AddHeader("content-length", pck.GetAsByteArray().Length.ToString());
        Response.BinaryWrite(pck.GetAsByteArray());
    }
}


请注意:我想生成 excel 并将其留给用户将 excel 报告保存在本地计算机上他们想要的任何位置,而不是在服务器上指定保存 excel 的路径。

4

1 回答 1

4

请尝试此解决方法,(避免对 GetAsByteArray() 的第二次调用,因为您注意到会释放对象)

byte[] rawData = pck.GetAsByteArray();
Response.AddHeader("content-length", rawData.Length.ToString());
Response.BinaryWrite(rawData);
于 2013-03-12T08:34:09.967 回答