2013-10-23 123 views
0

我有一個DataTable與50+列和100000+ rows.I需要轉儲整個DataTable值到一個Excel文件。任何人都可以請幫助在C#代碼在ASP.net.I需要每個列值都在一個單元格中。確切地說,我需要Excel文件中DataTable的精確副本。請幫助。導出DataTable到Excel文件在網頁

感謝, 基蘭

回答

0

,你可以調用這個方法,只是通過在你的數據表:

public static void DumpExcel(DataTable dataTable) 
    { 
     using (ExcelPackage package = new ExcelPackage()) 
     { 
      ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("DataTable"); 

      worksheet.Cells["A1"].LoadFromDataTable(dataTable, true); 

      for (int i = 1; i <= dataTable.Columns.Count; i++) 
      { 
       worksheet.Column(i).AutoFit(); 

       if (dataTable.Columns[i - 1].DataType == System.Type.GetType("System.DateTime")) 
       { 
        worksheet.Column(i).Style.Numberformat.Format = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; 
       } 
      } 

      HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
      HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=table.xlsx"); 
      HttpContext.Current.Response.BinaryWrite(package.GetAsByteArray()); 
      HttpContext.Current.Response.End(); 
     } 
    } 
1

Link for Export Excel

看一看這個例子的ExporttoExcel功能。它會幫助你。

+0

但我的數據是140列和100000行。我越來越內存異常。主要的問題是,我的服務器配置是2 GB,它與4 GB的效果很好。 Ram是限制。我的客戶不能增加內存。任何建議 – user2678769

0
public void ExportToExcel(string strFileName, DataTable dt) 
    { 
     try 
     { 
      if (dt != null && dt.Rows.Count > 0) 
      { 
       GridView gv = new GridView(); 
       gv.DataSource = dt; 
       gv.DataBind(); 
       ExportToExcel(strFileName, gv); 
      } 
      else 
      { 
       BindScript(this.Page, "excelError", "alert('No Data to Generate Excel !')"); 
      } 
     } 
     catch (Exception ex) 
     { 
      BindScript(this.Page, "excelError", "alert('Some error occured " + ex.Message + "')"); 
     } 
    } 

    private void ExportToExcel(string strFileName, GridView gv) 
    { 
     try 
     { 
      if (gv.Rows.Count > 0) 
      { 
       //Page page = new Page(); 
       //HtmlForm form = new HtmlForm(); 
       //Response.ClearContent(); 
       //Response.Buffer = true; 
       //Response.AddHeader("content-disposition", "attachment; filename=" + strFileName); 
       //Response.ContentType = "application/excel"; 
       ////System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
       //StringWriter sw = new StringWriter(); 
       //HtmlTextWriter htw = new HtmlTextWriter(sw); 
       //form.Controls.Add(gv); 
       //page.Controls.Add(form); 
       ////form.RenderControl(htw); 
       //HttpContext.Current.Server.Execute(page, sw, true); 
       //Response.Write(sw.ToString()); 
       //Response.Flush(); 
       //Response.End(); 

       StringWriter tw = new StringWriter(); 
       HtmlTextWriter hw = new HtmlTextWriter(tw); 

       //Get the HTML for the control. 
       gv.RenderControl(hw); 
       //Write the HTML back to the browser. 
       //Response.ContentType = application/vnd.ms-excel; 
       Response.ContentType = "application/vnd.ms-excel"; 
       Response.AppendHeader("Content-Disposition", "attachment; filename=" + strFileName); 
       EnableViewState = false; 
       Response.Write(tw.ToString()); 
       Response.End(); 
      } 
      else 
      { 
       BindScript(this.Page, "excelError", "alert('No Data to Generate Excel !')"); 
      } 
     } 
     catch (Exception ex) 
     { 
      BindScript(this.Page, "excelError", "alert('Some error occured " + ex.Message + "')"); 
     } 
    }