2009-07-07 4 views
0

私は を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のいくつかの並べ替えを取得していますされますスタイルの形式を上手にする、ページのリンクなどの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()メソッドを利用する方法を使用します。オプションで、1つまたは2つの列を非表示にすることができます。

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で開くかを指定します。 Excel 2007は残念なことに、ユーザーにこのアプローチに関する警告を表示するので、アプリケーションによっては、これがうまく動作しない場合もあります。

もう1つのアプローチ(重いですが)は、別のグリッドビューをページに置き、このメソッドに送信することです。利点は、ユーザーが画面上に表示されているものとは別にExhellの出力を簡単にカスタマイズできることです(つまり、javascriptをヤンク、列を追加するなど)。欠点は?もちろん、2つのグリッドビュー。

幸運。