2015-09-17 22 views
0

我必須提供將中繼器中顯示的所有數據導出到excel文件的功能。我已經成功完成了,但文件大小超過了4MB。在C#中導出中繼器數據到Excel中.net

這是我使用的代碼。

public void ExportToExcel(Repeater name) 
{ 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment;filename=RepeaterExport.csv"); 
    Response.Charset = ""; 
    Response.ContentType = "application/vnd.ms-excel"; 
    Repeater rp = name; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 

    foreach (RepeaterItem item in name.Items) 
    { 
     item.Controls.Remove(item.FindControl("hd_Depot")); 
     item.Controls.Remove(item.FindControl("hd_ProdCode")); 
     item.Controls.Remove(item.FindControl("hd_Closing")); 
     item.Controls.Remove(item.FindControl("hd_groupName")); 

    } 
    rp.RenderControl(hw); 
    Response.Output.Write(sw.ToString()); 
    Response.Flush(); 
    Response.End(); 
} 

現在,當我使用XLS或XLSX它下載完美,但與大尺寸的,但如果我使用CSV它寫入整個HTML代碼以Excel文件。我的主要動機是將excel文件的大小縮小到小於1MB。請指教。

+0

[This question](http://stackoverflow.com/questions/31403137/export-linq-query-result-to-excel-epplus)顯示瞭如何通過調用LoadFromDataTable方法從DataTable創建真正的Excel文件[EPPlus]資料庫。 EPPlus還有一個LoadFromCollection方法,可以加載任意對象。而不是使用中繼器,使用實際的數據表或數據對象列表,並將其傳遞給EPPlus –

回答

1

它看起來像你寫一個HTML或CSV文件,並假裝它是一個內容類型的Excel工作表,以便它打開Excel。更好的解決方案是使用somelibrary創建一個真正的Excel工作表,即使用xlsx擴展名,它可以爲您做到這一點。

+0

將解決尺寸問題? –

+0

是的。 'xlsx'是一個已經壓縮的二進制格式。原始代碼創建一個帶有修改擴展名的未壓縮HTML文件,因此它更大。儘管擴展名,HTML文件可能會或可能不會被Excel讀取,或導致本地化問題。就Excel而言,這只是一個使用*默認*導入設置導入的文本文件。 –

0

我認爲xlsx包含了整個html,這就是爲什麼它很大。

如果你只是想導出爲CSV:

  • 創建一個包含數據(在你的for循環)
  • CONTENTTYPE是一個字符串: 「文本/ CSV」

我使用kbCSV和CSVWriter。

+0

「xlsx」文件被壓縮。這裏沒有'xlsx'文件 - 它*是一個帶有'csv'擴展名和Excel內容類型的HTML文件。創建一個實際的'csv'會縮小一點,但仍然不會產生一個真正的Excel文件。 –