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() への 2 回目の呼び出しを回避します)。

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