2013-03-12 58 views
0

使用EPPlus庫時,從數據表錯誤而產生的C#從數據表中脫穎而出

System.ObjectDisposedException生成EXCEL我得到錯誤:包對象被關閉和處置,所以不能進行操作這個對象或在此包的一部分上打開的任何流。

我搜索到了發現hereGetAsByteArray()函數配置的包對象。 請幫助解決這個問題。

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

請嘗試這種解決方法(避免GetAsByteArray()正如你注意到處置對象的第二個呼叫)

byte[] rawData = pck.GetAsByteArray(); 
Response.AddHeader("content-length", rawData.Length.ToString()); 
Response.BinaryWrite(rawData); 
+0

感謝lot..it工作..!謝謝 – 2013-03-12 08:46:28