2012-12-02 62 views
56

tôi muốn xuất bảng dữ liệu sang tệp excel với EPPlus mà bảng dữ liệu có thuộc tính có loại int, vì vậy tôi muốn trong tệp excel, cùng định dạng sẽ là. Có ai biết cách để xuất một DataTable sang Excel bằng những thứ này không?Xuất DataTable thành excel với EPPlus

Trả lời

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

Điều đó sẽ thực hiện thủ thuật cho bạn. Nếu các trường của bạn được định nghĩa là int EPPlus sẽ đưa các cột vào một số hoặc nổi.

+1

thế nào thế nào để định dạng tiêu đề của datatable trong khi xuất khẩu ?? –

+0

Có. điều này làm việc tốt. Nhưng khi datatable chứa hàng trong lakhs. Cái này không hoạt động. – thevan

+1

Có lẽ bạn nên mở một câu hỏi cho trường hợp cụ thể đó? – wegginho

10

và nếu bạn muốn tải về để đáp ứng trình duyệt

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

Cảm ơn bạn đã trích đoạn nội dung! Không cần phải urlencode "Logs.xlsx" :) –

2

Đối tải excelsheet sử dụng trình duyệt HttpContext.Current.Response thay vì Response nếu không bạn sẽ nhận được Response is not available in this context. error.Here là mã của tôi

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

Đối với bất cứ ai nhận được 'System.Web.HttpContextBase' không chứa một định nghĩa cho 'hiện tại': Để có được một tham chiếu đến HttpContext.Current bạn cần thay thế HttpContext.Current với System.Web.HttpContext.Current http://stackoverflow.com/questions/19431820/system-web-httpcontextbase-does-not-contain-a-definition-for-current-mvc-4-wi –

Các vấn đề liên quan