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文档等。下面的方法,均用了这个属性

 

 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;  
        }
html输出为Excel
 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();
        }
页面控件输出为Excel
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();
        }
DataTable输出为Excel

1. 将整个网页输出为Excel,会将页面中的按钮、文本框、其他文字一并输出,往往达不到导出要求。

2. 将页面中的控件导出为Excel(如DataGrid、Repeater等),基本可以达到要求,但遇到控件分页的情况下,只会导出当前页面的内容,问不是select的全部内容。

3. DataTable导出为Excel,可以更灵活的控制导出的标题、内容。如果还需要更详细的设置Excel的格式,可以尝试DataView导出Excel的方法。

引用:

http://www.cnblogs.com/top5/archive/2010/02/16/1668801.html

 

posted on 2015-07-06 16:59  eye_like  阅读(463)  评论(0编辑  收藏  举报