【问题标题】:Large Dataset Download to excel大数据集下载到excel
【发布时间】:2013-10-01 18:12:07
【问题描述】:

我正在使用 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;
        }

我怎样才能做到这一点?

【问题讨论】:

  • 我试过的那个返回几乎 127269 行但它可以包含比这更大的行!

标签: c# asp.net export-to-excel epplus


【解决方案1】:

调整 executionTimeout 可能会解决您遇到的超时问题,默认情况下超时设置为 110 秒。您可以在herehere 找到有关此问题的更多信息。

更新 1:

我发现可能调用 Response.Flush(); 的迹象在 Response.TransmitFile 之后可能会有所帮助,但我仍在尝试理清原因。如果我找到充分的理由,我会跟进。

更新 2:

根据 MSDN 文档 Response.TrasmitFile 没有缓冲意味着 Response.Flush 应该对其处理没有影响。

更新 3:

我挖掘了 EPPlus 的源代码,他们有一些使用 ASP.NET here处理下载的示例代码

Response.BinaryWrite(pck.GetAsByteArray());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;  filename=Sample3.xlsx");

【讨论】:

  • 我认为您必须更改内容类型和配置以匹配。
【解决方案2】:

我在更新面板中更新了 AsyncPostBackTimeout="600" 并且成功了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2023-03-02
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多