0

EPPlus を使用して大きな Excel ファイルをダウンロードしています。ファイルを見るとデータが書き込まれますが、ダウンロード中にタイムアウト期限切れエラーが表示されます! 次のコードがあります。

     dtExport.Rows.Add(drFooter);
     DataSet ds = new DataSet();
     ds.Tables.Add(dtExport);
        try
        {
            FileInfo template = new FileInfo(HttpContext.Current.Server.MapPath(@"\ExcelPackageTemplate.xlsx"));
            FileInfo newfile = new FileInfo((filePath + filename));

            var rowCount = dtExport.Rows.Count;
            using (ExcelPackage pck = new ExcelPackage(newfile, template))
            {
                /**************Create Worksheet with datatable-- No Formatting************/
                ExcelWorkbook wb = pck.Workbook;
                ExcelWorksheet sheet = wb.Worksheets["Sheet1"];
                sheet.Cells["A1"].LoadFromDataTable(dtExport, true);

                string[] columnTypes = new string[dtExport.Columns.Count];

                for (int i = 0, j = 1; i <= dtExport.Columns.Count - 1; i++, j++)
                {
                    if (dtExport.Columns[i].ColumnName == "Date")
                    {
                        sheet.Column(j).Width = 12;
                    }
                    else
                    {
                        sheet.Column(j).AutoFit();
                    }
                }

                pck.Save();

                pck.Dispose();
              }
            }
          Response.TransmitFile((Server.MapPath("Excel/Rpt" + fileName)));

        }
        catch (Exception ex)
        {
            throw ex;
        }

どうすればこれを達成できますか?

4

2 に答える 2

0

executionTimeout を調整すると、デフォルトでタイムアウトが 110 秒に設定されているタイムアウトの問題に対処できる場合があります。この問題の詳細については、こちらこちらをご覧ください。

更新 1:

Response.Flush(); を呼び出している可能性があるという兆候を見つけています。Response.TransmitFile の後、役立つかもしれませんが、私はまだこの理由を整理しようとしています。正当な理由が見つかればフォローアップします。

更新 2:

MSDN のドキュメントによると、Response.TrasmitFile はバッファされません。つまり、Response.Flush はその処理に影響を与えるべきではありません。

更新 3:

EPPlus のソース コードを掘り下げたところ、ASP.NET でダウンロードを処理するためのサンプル コードがいくつかあります

Response.BinaryWrite(pck.GetAsByteArray());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;  filename=Sample3.xlsx");
于 2013-10-01T19:04:14.793 に答える
0

updatepanel で AsyncPostBackTimeout="600" を更新したところ、うまくいきました。

于 2013-10-02T15:17:28.143 に答える