大型数据集下载以超越
本文关键字:超越 下载 数据集 大型 | 更新日期: 2023-09-27 18:33:26
我正在使用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;
}
我怎样才能做到这一点?
调整执行超时可能会解决您遇到的超时问题 默认情况下,超时设置为 110 秒。您可以在此处和此处找到有关此问题的更多信息。
更新 1:
我发现有迹象表明,在 Response.TransmitFile 之后调用 Response.Flush(); 可能会有所帮助,但我仍在尝试理清原因。如果我找到一个充分的理由,我会跟进。
更新 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");
我在updatepanel中更新了AsyncPostBackTimeout="600",它起作用了!