2012-12-02 19 views

Odpowiedz

114
using (ExcelPackage pck = new ExcelPackage(newFile)) 
{ 
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Accounts"); 
    ws.Cells["A1"].LoadFromDataTable(dataTable, true); 
    pck.Save(); 
} 

To powinno wystarczyć dla Ciebie. Jeśli twoje pola są zdefiniowane jako int EPPlus poprawnie rzuci kolumny w liczbę lub liczbę zmiennoprzecinkową.

+1

Jak sformatować nagłówki datatable podczas eksportowania? –

+0

Tak. to działa dobrze. Ale gdy datatable zawiera wiersze w tysiącach. Ten nie działa. – thevan

+1

Może powinieneś zatem otworzyć pytanie dotyczące tego konkretnego przypadku? – wegginho

10

i jeśli chcesz pobrać w odpowiedzi przeglądarki

Response.Clear(); 
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("Logs.xlsx", System.Text.Encoding.UTF8)); 

using (ExcelPackage pck = new ExcelPackage()) 
{ 
    ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Logs"); 
    ws.Cells["A1"].LoadFromDataTable(dt, true);     
    var ms = new System.IO.MemoryStream(); 
    pck.SaveAs(ms); 
    ms.WriteTo(Response.OutputStream);       
} 
+0

Dzięki za urywek! Nie ma potrzeby, aby urlencode "Logs.xlsx" :) –

2

Za pobraniem excelsheet w użyciu przeglądarki HttpContext.Current.Response zamiast Response inaczej dostaniesz Response is not available in this context. error.Here jest mój kod

public void ExporttoExcel(DataTable table, string filename) 
     { 
      HttpContext.Current.Response.Clear(); 
      HttpContext.Current.Response.ClearContent(); 
      HttpContext.Current.Response.ClearHeaders(); 
      HttpContext.Current.Response.Buffer = true; 
      HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8; 
      HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
      HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=GridData.xlsx"); 


      using (ExcelPackage pack = new ExcelPackage()) 
      { 
       ExcelWorksheet ws = pack.Workbook.Worksheets.Add(filename); 
       ws.Cells["A1"].LoadFromDataTable(table, true); 
       var ms = new System.IO.MemoryStream(); 
       pack.SaveAs(ms); 
       ms.WriteTo(HttpContext.Current.Response.OutputStream); 
      } 

      HttpContext.Current.Response.Flush(); 
      HttpContext.Current.Response.End(); 

     } 
+0

Dla każdego, pobieranie "System.Web.HttpContextBase" nie zawiera definicji "Current": Aby uzyskać odniesienie do HttpContext.Current trzeba zastąpić HttpContext.Current z System.Web.HttpContext.Current http://stackoverflow.com/questions/19431820/system-web-httpcontextbase-does-not-contain-a-definition-for-current-mvc-4-wi –

Powiązane problemy