这是asp.net 中将页面数据导出word、excel的常用代码(以datagrid为例)
导出word代码:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.doc");
Response.Charset = "utf-8";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.word";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
DataGrid1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
导出excel代码:
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "utf-8";
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);
DataGrid1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
这个代码很容易可以在网上搜到,但是如果页面的datagrid有排序和分页时就会出现错误,这是时候如果用循环导出数据,实在是不爽。现有一个新的办法:
第一种:
复制同样一个datagrid,赋同样的数据,隐藏,取消分页和排序功能:
Datagrid2.Visible=true;
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "utf-8";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";
this.EnableViewState=false;
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
Datagrid2.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
Datagrid2.Visible=false;
即可倒出漂亮的excel文件,word同上
同理可得:导出前取消分页和排序,导出再恢复,可以实现这个功能