2013-10-01 2 views
0

Я использую EPPlus для загрузки большого файла excel. когда я вижу файл, он записывает данные в него, но при загрузке он говорит о просроченной ошибке! У меня есть следующий код.Large Dataset Загрузить в 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; 
     } 

Как я могу это достичь?

+0

Насколько велик файл? – Amy

+0

тот, который я попробовал, возвращает почти 127269 строк, но он может содержать больше этого! – rach

ответ

0

Я обновил AsyncPostBackTimeout = "600" в обновленной панели, и это сработало!

0

Настройка выполненияTimeout может указывать на проблему с таймаутом, в которую вы работаете, по умолчанию таймаут установлен на 110 секунд. Дополнительную информацию по этому вопросу можно найти here и here.

Update 1:

Я нахожу признаки того, что, возможно, призывающих Response.Flush(); после Response.TransmitFile может помочь, но я все еще пытаюсь разобраться в аргументации для этого. Я буду следить, если найду хорошую причину.

Update 2:

Согласно документации Response.TrasmitFile MSDN не означает, что буфер Response.Flush не должен иметь никакого влияния на его обработку.

Update 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"); 
+0

Я добавил executeTimeout = "43200", но все равно он не работал. – rach

+0

Я предполагаю, что вам нужно будет изменить тип и расположение контента для соответствия. –

Смежные вопросы