gridview数据导出到asp.net中的excel

我试图将网格视图数据转移到excel ….但输出是一个空白excel表。如何解决这个问题?是否有任何代码传输网格视图值Excel表与数据库?

protected void btnexcel_Click1(object sender, EventArgs e) { Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); gvdetails.AllowPaging = false; gvdetails.DataBind(); gvdetails.HeaderRow.Style.Add("background-color", "#FFFFFF"); gvdetails.HeaderRow.Cells[0].Style.Add("background-color", "green"); gvdetails.HeaderRow.Cells[1].Style.Add("background-color", "green"); gvdetails.HeaderRow.Cells[2].Style.Add("background-color", "green"); for (int i = 0; i < gvdetails.Rows.Count;i++ ) { GridViewRow row = gvdetails.Rows[i]; row.BackColor = System.Drawing.Color.White; row.Attributes.Add("class", "textmode"); if (i % 2 != 0) { row.Cells[0].Style.Add("background-color", "#C2D69B"); row.Cells[1].Style.Add("background-color", "#C2D69B"); row.Cells[2].Style.Add("background-color", "#C2D69B"); } } string style = @"<style> .textmode { mso-number-format:\@; } </style>"; Response.Write(style); Response.Output.Write(sw.ToString()); Response.End(); } 

你的工作表是空的,因为你的string编写器是空的 以下是可能的帮助

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

这里是完整的代码

 protected void Button1_Click(object sender, EventArgs e) { Response.Clear(); Response.AddHeader("content-disposition", "attachment; filename=FileName.xls"); 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(); } 

可能是导出excel中的数据绑定问题。 检查数据是否正确地bin到一个gridview或不。

在excel表格中使用这个代码导出网格视图,注意你必须在你的项目中添加iTextSharp dll。

 protected void btnExportExcel_Click(object sender, EventArgs e) { Response.Clear(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); GridView1.AllowPaging = false; // Re-Bind data to GridView using (CompMSEntities1 CompObj = new CompMSEntities1()) { Start = Convert.ToDateTime(txtStart.Text); End = Convert.ToDateTime(txtEnd.Text); GridViewSummaryReportCategory.DataSource = CompObj.SP_Category_Summary(Start, End); SP_Category_Summary_Result obj1 = new SP_Category_Summary_Result(); GridView1.DataBind(); GridView1.Visible = true; ExportTable.Visible = true; } //Change the Header Row back to white color GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF"); GridView1.Style.Add(" font-size", "10px"); //Apply style to Individual Cells GridView1.HeaderRow.Cells[0].Style.Add("background-color", "green"); GGridView1.HeaderRow.Cells[1].Style.Add("background-color", "green"); GridView1.HeaderRow.Cells[2].Style.Add("background-color", "green"); GridView1.HeaderRow.Cells[3].Style.Add("background-color", "green"); GridView1.HeaderRow.Cells[4].Style.Add("background-color", "green"); for (int i = 1; i < GridView1.Rows.Count; i++) { GridViewRow row = GridView1.Rows[i]; //Change Color back to white row.BackColor = System.Drawing.Color.White; //Apply text style to each Row // row.Attributes.Add("class", "textmode"); //Apply style to Individual Cells of Alternating Row if (i % 2 != 0) { row.Cells[0].Style.Add("background-color", "#C2D69B"); row.Cells[1].Style.Add("background-color", "#C2D69B"); row.Cells[2].Style.Add("background-color", "#C2D69B"); row.Cells[3].Style.Add("background-color", "#C2D69B"); row.Cells[4].Style.Add("background-color", "#C2D69B"); } } GridView1.RenderControl(hw); //style to format numbers to string string style = @"<style> .textmode { mso-number-format:\@; } </style>"; Response.Write(style); Response.Output.Write(sw.ToString()); Response.Flush(); Response.End(); } 

我认为这会帮助你

 string filename = String.Format("Results_{0}_{1}.xls", DateTime.Today.Month.ToString(), DateTime.Today.Year.ToString()); if (!string.IsNullOrEmpty(GRIDVIEWNAME.Page.Title)) filename = GRIDVIEWNAME.Page.Title + ".xls"; HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; HttpContext.Current.Response.Charset = ""; System.IO.StringWriter stringWriter = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); System.Web.UI.HtmlControls.HtmlForm form = new System.Web.UI.HtmlControls.HtmlForm(); GRIDVIEWNAME.Parent.Controls.Add(form); form.Controls.Add(GRIDVIEWNAME); form.RenderControl(htmlWriter); HttpContext.Current.Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); HttpContext.Current.Response.Write(stringWriter.ToString()); HttpContext.Current.Response.End(); 

而不是所有这些..不能你使用一个更简单的方法,如下所示。

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

你可以在这里得到整个演练

别的要检查的是确保viewstate是(我刚刚解决这个昨天)。 如果你没有viewstate,gridview将会是空白的,直到你再次加载。

最好的方法是使用closedxml。 以下是供参考的链接

https://closedxml.codeplex.com/wikipage?title=Adding%20DataTable%20as%20Worksheet&referringTitle=Documentation

你可以简单的使用

  var wb = new ClosedXML.Excel.XLWorkbook(); DataTable dt = GeDataTable();//refer documentaion wb.Worksheets.Add(dt); Response.Clear(); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("content-disposition", "attachment;filename=\"FileName.xlsx\""); using (var ms = new System.IO.MemoryStream()) { wb.SaveAs(ms); ms.WriteTo(Response.OutputStream); ms.Close(); } Response.End(); 

我不在那里有任何gridview DataSource
尽pipe你的代码中有DataBind

 gvdetails.DataBind();