2009-07-07 82 views
0

我想網格視圖的內容轉換到Excel文件 ,我使用此代碼網格視圖的Excel

string attachment = "attachment; filename= " + FileName; 
Response.ClearContent(); 
Response.AddHeader("content-disposition", attachment); 
Response.ContentType = "application/excel"; 
StringWriter sw = new StringWriter(); 
HtmlTextWriter htw = new HtmlTextWriter(sw); 
gv.RenderControl(htw);   
Response.Write(sw.ToString()); 
Response.End(); 

問題是我得到在某種形式的html excel樣式格式,在頁面鏈接等theres java腳本 我想要的是將我的查詢結果轉換爲逗號分隔文件 是否可以免費或我必須運行查詢自己獲取數據和寫出一個csv流 謝謝

回答

0

我不知道如果我完全支持你的問題,但你發佈的代碼應該創建一個有效的Excel文件。至於創建一個csv文件,如果你想從你的gridview創建csv文件,試試這個。

string attachment = "attachment; filename=test.csv"; 
Response.ClearContent(); 
Response.AddHeader("content-disposition", attachment); 

StringWriter sw = new StringWriter(); 
StringBuilder sb = sw.GetStringBuilder(); 

foreach (GridViewRow row in GridView1.Rows) 
{ 
    string[] values = new string[row.Cells.Count];    
    for (int i = 0; i < row.Cells.Count; i++) 
    {     
     values[i] = row.Cells[i].Text; 
    }    
    sb.AppendLine(String.Join(",", values)); 
} 

HtmlTextWriter htw = new HtmlTextWriter(sw);   
Response.Write(sw.ToString()); 
Response.End(); 
0

我使用了一種利用GridView自身的.RenderControl()方法的方法。或者,您可以隱藏一列或兩列。

public static void ExportGridToExcel(System.Web.UI.Page p_Page, System.Web.UI.WebControls.GridView p_GridView, int[] p_ColumnsToHide) 
    { 

    if (p_ColumnsToHide != null) 
    { 
     foreach (int i in p_ColumnsToHide) 
     { 
      p_GridView.Columns[i].Visible = false; 
     }//foreach 
    }//if 

    p_Page.Response.Clear(); 
    p_Page.Response.Buffer = true; 
    p_Page.Response.AddHeader("content-disposition", "attachment; filename=output.xls"); 
    p_Page.Response.ContentType = "application/vnd.ms-excel"; 
    p_Page.Response.Charset = string.Empty; 
    p_Page.EnableViewState = false; 

    System.IO.StringWriter sw = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(sw); 

    p_GridView.RenderControl(oHtmlTextWriter); 
    p_Page.Response.Write(sw.ToString()); 
    p_Page.Response.End(); 

    } 

如果沒有現成的工作,則是其中之一,你提到...手動寫出一個CSV流的一些其他選項,(我更喜歡製表符分隔自己),然後躺在向瀏覽器發送您要發送的文件類型,以便在Exhell中打開它。不幸的是,Exhell 2007現在給用戶提供了一個關於這種方法的警告,因此取決於應用程序,這可能或可能不適用於您。

另一種方法(儘管很重)是在頁面上放置另一個gridview並將其發送到此方法。優點是,您可以輕鬆地自定義Exhell輸出與用戶在屏幕上看到的內容(即,yank javascript,添加列等)。缺點?當然是兩個gridviews。

祝你好運。