C# 將數據導出到Excel彙總

        在asp.net中導出Excel有兩種方法:一種是將導出的文件存放在服務器某個文件夾下面,然後將文件地址輸出在瀏覽器上;一種是將直接將文件輸出流寫給瀏覽器。在Response輸出時,t分隔的數據,導出Excel時,等價於分列,n等價於換行。

1、將整個html全部輸出Excel

  此法將html中所有的內容,如按鈕,表格,圖片等全部輸出到Excel中。

   Response.Clear();    
   Response.Buffer=   true;    
   Response.AppendHeader("Content-Disposition","attachment;filename="+DateTime.Now.ToString    ("yyyyMMdd")+".xls");          
   Response.ContentEncoding=System.Text.Encoding.UTF8;  
   Response.ContentType   =   "application/vnd.ms-excel";  
   this.EnableViewState   =   false;  
這裏我們利用了ContentType屬性,它默認的屬性爲text/html,這時將輸出爲超文本,即我們常見的網頁格式到客戶端,如果改爲ms-excel將將輸出 excel格式,也就是說以電子表格的格式輸出到客戶端,這時瀏覽器將提示你下載保存。ContentType的屬性還包括:image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword 。同理,我們也可以輸出(導出)圖片、word文檔等。下面的方法,也均用了這個屬性。

2、將DataGrid控件中的數據導出Excel

上述方法雖然實現了導出的功能,但同時把按鈕、分頁框等html中的所有輸出信息導了進去。而我們一般要導出的是數據,DataGrid控件上的數據。

public void DGToExcel(System.Web.UI.Control ctl)  
  {
   HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");
   HttpContext.Current.Response.Charset ="UTF-8";    
   HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;
   HttpContext.Current.Response.ContentType ="application/ms-excel";
   ctl.Page.EnableViewState =false;   
   System.IO.StringWriter  tw = new System.IO.StringWriter() ;
   System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
   ctl.RenderControl(hw);
   HttpContext.Current.Response.Write(tw.ToString());
   HttpContext.Current.Response.End();
  }

3、將DataSet中的數據導出Excel

有了上邊的思路,就是將在導出的信息,輸出(Response)客戶端,這樣就可以導出了。那麼把DataSet中的數據導出,也就是把DataSet中的表中的各行信息,以ms-excel的格式Response到http流,這樣就OK了。說明:參數ds應爲填充有數據表的DataSet,文件名是全名,包括後綴名,如Excel2006.xls


public  void CreateExcel(DataSet ds,string FileName) 
{
 HttpResponse resp;
 resp = Page.Response;
 resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
 resp.AppendHeader("Content-Disposition", "attachment;filename="+FileName);   
 string colHeaders= "", ls_item="";   
 
 //定義表對象與行對象,同時用DataSet對其值進行初始化
 DataTable dt=ds.Tables[0];
 DataRow[] myRow=dt.Select();//可以類似dt.Select("id>10")之形式達到數據篩選目的
        int i=0;
        int cl=dt.Columns.Count;
    
 //取得數據表各列標題,各標題之間以t分割,最後一個列標題後加回車符
 for(i=0;i<cl;i++)
 {
 if(i==(cl-1))//最後一列,加n
 {
 colHeaders +=dt.Columns[i].Caption.ToString() +"n";
 }
 else
 {
 colHeaders+=dt.Columns[i].Caption.ToString()+"t";
 }
      
 }
 resp.Write(colHeaders);
 //向HTTP輸出流中寫入取得的數據信息
   
 //逐行處理數據  
 foreach(DataRow row in myRow)
 {     
 //當前行數據寫入HTTP輸出流,並且置空ls_item以便下行數據    
 for(i=0;i<cl;i++)
 {
 if(i==(cl-1))//最後一列,加n
 {
 ls_item +=row[i].ToString()+"n";
 }
 else
 {
 ls_item+=row[i].ToString()+"t";
 }
  
 }
 resp.Write(ls_item);
 ls_item="";
    
 }    
 resp.End(); 
 }
 
 



 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章