EXCEL OUTPUT 类 using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Text; using System.IO; using System.Data; /// <summary> ///ExcelOutput 的摘要说明 /// </summary> public class ExcelOutput { private GridView gvShow = new GridView(); private HttpContext _hc; // private DataList dlshow = new DataList(); private DetailsView dvshow = new DetailsView(); public ExcelOutput(HttpContext hc) //HttpContext { _hc = hc; } public void OutPut<T>(List<T> obj,string name) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); Page page = new Page(); HtmlForm form = new HtmlForm(); gvShow.EnableViewState = false; gvShow.DataSource = obj; gvShow.DataBind(); page.EnableEventValidation = false; // Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD. page.DesignerInitialize(); page.Controls.Add(form); form.Controls.Add(gvShow); page.RenderControl(htw); _hc.Response.Clear(); _hc.Response.Buffer = true; _hc.Response.ContentType = "application/vnd.ms-excel"; _hc.Response.AddHeader("Content-Disposition", "attachment;filename=data.xls"); //如果输出为Word,修改为以下代码 //Response.ContentType = "application/ms-word" ; //Response.AddHeader("Content-Disposition", "inline;filename=test.doc"); //Response.Charset = "UTF-8"; _hc.Response.ContentEncoding = Encoding.Default; _hc.Response.Write(sb.ToString()); _hc.Response.End(); } public void OutPut(DataTable dt) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); Page page = new Page(); HtmlForm form = new HtmlForm(); gvShow.EnableViewState = false; gvShow.DataSource = dt; gvShow.DataBind(); page.EnableEventValidation = false; // Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD. page.DesignerInitialize(); page.Controls.Add(form); form.Controls.Add(gvShow); page.RenderControl(htw); _hc.Response.Clear(); _hc.Response.Buffer = true; _hc.Response.ContentType = "application/vnd.ms-excel"; _hc.Response.AddHeader("Content-Disposition", "attachment;filename=data.xls"); //如果输出为Word,修改为以下代码 //Response.ContentType = "application/ms-word" ; //Response.AddHeader("Content-Disposition", "inline;filename=test.doc"); //Response.Charset = "UTF-8"; _hc.Response.ContentEncoding = Encoding.Default; _hc.Response.Write(sb.ToString()); _hc.Response.End(); } public void OutPut(GridView dt) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); Page page = new Page(); HtmlForm form = new HtmlForm(); dt.EnableViewState = false; page.EnableEventValidation = false; dt.Columns.RemoveAt(0); // Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD. page.DesignerInitialize(); page.Controls.Add(form); form.Controls.Add(dt); page.RenderControl(htw); _hc.Response.Clear(); _hc.Response.Buffer = true; _hc.Response.ContentType = "application/vnd.ms-excel"; _hc.Response.AddHeader("Content-Disposition", "attachment;filename=data.xls"); //如果输出为Word,修改为以下代码 //Response.ContentType = "application/ms-word" ; //Response.AddHeader("Content-Disposition", "inline;filename=test.doc"); //Response.Charset = "UTF-8"; _hc.Response.ContentEncoding = Encoding.Default; _hc.Response.Write(sb.ToString()); _hc.Response.End(); } public void OutPut(DataList dl ) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); Page page = new Page(); HtmlForm form = new HtmlForm(); dl.EnableViewState = false; page.EnableEventValidation = false; // Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD. page.DesignerInitialize(); page.Controls.Add(form); form.Controls.Add(dl); page.RenderControl(htw); _hc.Response.Clear(); _hc.Response.Buffer = true; _hc.Response.ContentType = "application/vnd.ms-excel"; _hc.Response.AddHeader("Content-Disposition", "attachment;filename=data.xls"); //如果输出为Word,修改为以下代码 //Response.ContentType = "application/ms-word" ; //Response.AddHeader("Content-Disposition", "inline;filename=test.doc"); //Response.Charset = "UTF-8"; _hc.Response.ContentEncoding = Encoding.Default; _hc.Response.Write(sb.ToString()); _hc.Response.End(); } public void OutPut(DetailsView dv) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); Page page = new Page(); HtmlForm form = new HtmlForm(); dv.EnableViewState = false; page.EnableEventValidation = false; // Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD. page.DesignerInitialize(); page.Controls.Add(form); form.Controls.Add(dv); page.RenderControl(htw); _hc.Response.Clear(); _hc.Response.Buffer = true; _hc.Response.ContentType = "application/vnd.ms-excel"; _hc.Response.AddHeader("Content-Disposition", "attachment;filename=data.xls"); //如果输出为Word,修改为以下代码 //Response.ContentType = "application/ms-word" ; //Response.AddHeader("Content-Disposition", "inline;filename=test.doc"); //Response.Charset = "UTF-8"; _hc.Response.ContentEncoding = Encoding.Default; _hc.Response.Write(sb.ToString()); _hc.Response.End(); } } 解决办法: 此方法 注掉一行( // dt.Columns.RemoveAt(0);) public void OutPut(GridView dt) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter htw = new HtmlTextWriter(sw); Page page = new Page(); HtmlForm form = new HtmlForm(); dt.EnableViewState = false; page.EnableEventValidation = false; // dt.Columns.RemoveAt(0); // Realiza las inicializaciones de la instancia de la clase Page que requieran los diseñadores RAD. page.DesignerInitialize(); page.Controls.Add(form); form.Controls.Add(dt); page.RenderControl(htw); _hc.Response.Clear(); _hc.Response.Buffer = true; _hc.Response.ContentType = "application/vnd.ms-excel"; _hc.Response.AddHeader("Content-Disposition", "attachment;filename=data.xls"); //如果输出为Word,修改为以下代码 //Response.ContentType = "application/ms-word" ; //Response.AddHeader("Content-Disposition", "inline;filename=test.doc"); //Response.Charset = "UTF-8"; _hc.Response.ContentEncoding = Encoding.Default; _hc.Response.Write(sb.ToString()); _hc.Response.End(); }