2012-05-02 7 views
5

グリッドビューのデータをエクスポートするExcelファイルを保存します。グリッドビューのデータをエクセルに書き出すコードを書いていますが、書き出したファイルを保存する方法はわかりません。続きエクセルファイルをExcelにエクスポートし、フォルダに保存する

は、ExcelにGridViewのをエクスポートするための私のコードです:

Response.Clear(); 
Response.Buffer = true; 
Response.ContentType = "application/vnd.ms-excel"; 
Response.AddHeader("content-disposition", "attachment;filename=MyFiles.xls"); 
Response.Charset = ""; 
this.EnableViewState = false; 
System.IO.StringWriter sw = new System.IO.StringWriter(); 
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); 
gvFiles.RenderControl(htw); 
Response.Write(sw.ToString()); 
Response.End(); 
+5

あなたはあなたがファイルをExcelテーブルに変換できますか? Excelはそれを解釈することができますが、とにかくそれは本当のExcelファイルではありません。 [EPPLus](http://epplus.codeplex.com/releases/view/42439)をご覧ください。 –

+0

TimさんはEPPlusを使用しています。実際の.xlsxファイルを生成するライブラリであり、代わりにダウンロードすることができます。私はそれを予算モニタリングアプリに使用しました。それは素晴らしいです。 – markp3rry

+0

グリッドビューのデータソースは何ですか? –

答えて

10

あなたがこれを行うことができます:

private void ExportGridView() 
{ 
    System.IO.StringWriter sw = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); 

    // Render grid view control. 
    gvFiles.RenderControl(htw); 

    // Write the rendered content to a file. 
    string renderedGridView = sw.ToString(); 
    System.IO.File.WriteAllText(@"C:\Path\On\Server\ExportedFile.xlsx", renderedGridView); 
} 
+1

私にエラーがあります タイプ 'GridView'のコントロール 'gvFiles'は、runat = serverのフォームタグ内に配置する必要があります。 :( – Neo

+1

は 公共オーバーライド無効VerifyRenderingInServerForm(コントロール制御) { } – Neo

0

あなたがエクスポートしたファイルを保存する方法を求めている...あなたのコードは、レスポンスにGridViewの(HTML)のレンダリングされた内容を置きます。この場合、あなたのブラウザ(クライアント側)はこの応答を受け取り、それを保存するダイアログをポップアップします。したがって、ブラウザがファイルを保存します。

サーバー側に保存する場合は、レンダリングされたグリッドビューをレスポンスに含めないでください。その代わりに(上記の答えのように)ローカルのハードディスク上のファイルに書き込みます。

独自の開発マシン(つまり運用環境)以外の環境では、ASP.NETワーカープロセスがハードディスク上の指定された場所に書き込むのに十分なアクセス権を持っていない可能性があることに注意してください。ここではその問題を住所が回答のカップルです:

ASP.net user account permissions
ASP.NET + Access to the path is denied
System.UnauthorizedAccessException: Access to the path is denied

1

これはあなた//

protected void exporttoexcel_Click(object sender, EventArgs e) 
{ 
    Response.Clear(); 

    Response.AddHeader("content-disposition", "attachment;filename=" attachment" + ".xls"); 

    Response.Charset = ""; 

    // If you want the option to open the Excel file without saving than 

    // comment out the line below 

    // Response.Cache.SetCacheability(HttpCacheability.NoCache); 

    Response.ContentType = "application/vnd.xls"; 

    System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 

    System.Web.UI.HtmlTextWriter htmlWrite = 
    new HtmlTextWriter(stringWrite); 

    GridView1.RenderControl(htmlWrite); 

    Response.Write(stringWrite.ToString()); 

    Response.End(); 

} 
public override void VerifyRenderingInServerForm(Control control) 
{ 

    // Confirms that an HtmlForm control is rendered for the 
    //specified ASP.NET server control at run time. 

} 
+0

これは私が完全にエクスポート・ツー・エクセルのコードで作業を助けた。維持についてちょうどそうわからない 午前 'VerifyRenderingInServerForm(コントロール制御)ANSを得ました'空だけど。 – AceMark

0
役立つかもしれません

フォローのリンク:C# Excel file OLEDB read HTML IMPORT

Extended Properties=\"HTML Import;HDR=No;IMEX=1 the select * from [tablename]を使用してください。 tablenameがGetOleDbSchemaTableから返されます。

注:これは正常なExcelをロードしません。そのためにはExtended Properties=\"Excel 8.0;HDR=No;IMEX=1\を使用してください。テーブル名は$となります。

チェックサンプルコード: Can't read excel file after creating it using File.WriteAllText() function

1
public partial class exportgridtoexcel : System.Web.UI.Page 
{ 
    SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString.ToString()); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      GetData(); 
     } 
    } 
    public void GetData() 
    { 
     SqlDataAdapter sda = new SqlDataAdapter("select * from EmpData", con); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
    } 

    protected void btnDownload_Click(object sender, EventArgs e) 
    { 
     GetData(); 
     exporttoexcel("Report.xls", GridView1); 
     GridView1 = null; 
     GridView1.Dispose(); 



    } 
    public void exporttoexcel(string filename,GridView gv) 
    { 
     Response.ClearContent(); 
     Response.AddHeader("content-disposition", "attachment;filename=" + filename); 
     Response.ContentType = "applicatio/excel"; 
     StringWriter sw = new StringWriter(); ; 
     HtmlTextWriter htm=new HtmlTextWriter(sw); 
     gv.RenderControl(htm); 
     Response.Write(sw.ToString()); 
     Response.End(); 
    } 
    public override void VerifyRenderingInServerForm(Control control) 
    { 

    } 
} 

}

-1

最初の追加EPPLUS参照ライブラリをアプリケーションに追加し、OfficeOpenXmlを使用して追加します。

//ビジネスオブジェクトクラス

クラスbocls {

string name; 

    public string NAME 
    { 
     get { return name; } 
     set { name = value; } 
    } 
    string id; 

    public string ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 



    public bocls() { } 
    public bocls(string name, string id) 
    { 
     this.name = name; 
     this.id = id;   

    } 

//エクスポートボタンのクリックイベントで

保護無効lbtnExport_Click(オブジェクト送信者、EventArgsの電子) {

  List<bocls> list6 = new List<bocls>(); 
      //copy the grid view values into list 
      list6 = (from row in dataGridView1.Rows.Cast<DataGridViewRow>() 
      from cell in row.Cells.Cast<DataGridViewCell>() 
      select new 
      { 
       //project into your new class from the row and cell vars. 
      }).ToList(); 
    } 
      ExcelPackage excel = new ExcelPackage(); 
      var workSheet = excel.Workbook.Worksheets.Add("Products"); 
      var totalCols = GridView1.Rows[0].Cells.Count; 
      var totalRows = GridView1.Rows.Count; 
      var headerRow = GridView1.HeaderRow; 
      for (var i = 1; i <= totalCols; i++) 
      { 
       workSheet.Cells[1, i].Value = headerRow.Cells[i - 1].Text; 
      } 
      for (var j = 1; j <= totalRows; j++) 
      { 
       for (var i = 1; i <= totalCols; i++) 
       { 
        var item = list6.ElementAt(j - 1); 

        workSheet.Column(1).Width = 13; 
        workSheet.Column(2).Width = 10; 

        workSheet.Cells[j + 1, i].Style.WrapText = true; 

        if (headerRow.Cells[i - 1].Text == "ID") 
         workSheet.Cells[j + 1, i].Value = item.GetType().GetProperty("id").GetValue(item, null); 
        else if (headerRow.Cells[i - 1].Text == "NAME") 
         workSheet.Cells[j + 1, i].Value = item.GetType().GetProperty("name").GetValue(item, null); 

        workSheet.Cells[j + 1, i].Value = workSheet.Cells[j + 1, i].Value.ToString().Replace("<br/>", ""); 
       } 
      } 
      using (var memoryStream = new MemoryStream()) 
      { 

       Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       string filename = Guid.NewGuid().ToString() + ".xlsx"; 
       Response.AddHeader("content-disposition", "attachment; filename=" + filename); 
       excel.SaveAs(memoryStream); 
       //add your destination folder 
       FileStream fileStream = new FileStream(@"C:\Users\karthi\Downloads\New folder\" + filename, FileMode.Create,FileAccess.Write,FileShare.Write); 
       memoryStream.WriteTo(fileStream); 
       fileStream.Close(); 
       memoryStream.WriteTo(Response.OutputStream); 
       memoryStream.Close(); 
       memoryStream.WriteTo(Response.OutputStream); 
       Response.Flush(); 
       Response.End(); 
      } 

    } 
関連する問題