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 レポートを保存するようにユーザーに任せたいと考えています。