c# 导出Excel
web导出Excel
用法:在服务器端读取数据,在服务器端把数据以ms-execl的格式,以Response输出到浏览器(客户端)
这里我们利用了ContentType属性,如text/html,这时将输出为超文本,即我们常见的网页
格式到客户端,如果改为 ms-excel将将输出excel格式,也就是说以电子表格的格式输出到客户端,这时浏
览器将提示你下载保存。ContentType的属性还包括:image/JPEG;text/HTML;image/GIF;vnd.ms-
excel/msword 。同理,我们也可以输出(导出)图片、word文档等。下面的方法,均用了这个属性
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private void outputExcel() { Response.Clear(); Response.Buffer = true; Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyyMMdd") + ".xls"); Response.ContentEncoding = System.Text.Encoding.UTF8; Response.ContentType = "application/vnd.ms-excel"; this.EnableViewState = false; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public void outputExcel(System.Web.UI.Control ctl) { HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel.xls"); HttpContext.Current.Response.Charset = "UTF-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default; HttpContext.Current.Response.ContentType = "application/ms-excel"; ctl.Page.EnableViewState = false; System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); ctl.RenderControl(hw); HttpContext.Current.Response.Write(tw.ToString()); HttpContext.Current.Response.End(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private void outputExcel(DataTable dt) { if (dt == null || dt.Rows.Count == 0) { Fun.Alert("请先检索要查询的信息后在导出!"); return; } string fileName = "社员信息" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + ".xls"; HttpResponse resp; resp = Page.Response; resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName); string colHeaders = "", ls_item = "", ls_Bottom = ""; DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的 int i = 0; int cl = dt.Columns.Count; //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符 //for (i = 0; i < cl; i++) //{ // if (i == (cl - 1))//最后一列,加\n // { // colHeaders += dt.Columns[i].Caption.ToString() + "\n"; // } // else // { // colHeaders += dt.Columns[i].Caption.ToString() + "\t"; // } //} colHeaders += "网点\t社员账号\t地址\t姓名\t身份证号\t手机号\t田亩册\t田亩数\t入社时间\n"; resp.Write(colHeaders);//输出标题栏 //向HTTP输出流中写入取得的数据信息 foreach (DataRow row in myRow) { //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 for (i = 0; i < cl; i++) { if (i == (cl - 1))//最后一列,加\n { ls_item += row[i].ToString() + "\n"; } else { ls_item += row[i].ToString() + "\t"; } } resp.Write(ls_item); ls_item = ""; } resp.Write(ls_Bottom);//输出内容 resp.End(); }
1. 将整个网页输出为Excel,会将页面中的按钮、文本框、其他文字一并输出,往往达不到导出要求。
2. 将页面中的控件导出为Excel(如DataGrid、Repeater等),基本可以达到要求,但遇到控件分页的情况下,只会导出当前页面的内容,问不是select的全部内容。
3. DataTable导出为Excel,可以更灵活的控制导出的标题、内容。如果还需要更详细的设置Excel的格式,可以尝试DataView导出Excel的方法。
引用:
http://www.cnblogs.com/top5/archive/2010/02/16/1668801.html