联系我们 更多>>
  • 地址:西安经济技术开发区中环大厦A座18F-A
  • 电话:029-83765753
  • Q Q:374676511
当前位置:首页 >> ASP.NET >> 正文

asp.net实现导出Word、Excel格式文件

来源:网络来源 时间:2010-05-11 点击:
在做.NET项目时,会经常遇到要导出文件的问题,如将DataGrid中的数据导出到excel、word文件等,经常使用的是Office中的OWC组件,这个组件提供的功能很强大,在一般的项目中都可以满足当前的需要。但是这个功能强大的组件使用起来却不是很方便,不但有版本的问题,而且代码量也相对比较大,现在简单介绍一下利用Respone对象和相关的IO实现导出excel/word等文件的方法。
  1.Respone对象及相关的IO介绍

System.IO.StringWriter SW = new System.IO.StringWriter();
  System.Web.UI.HtmlTextWriter HTW=new System.Web.UI.HtmlTextWriter(SW);
  Page.RenderControl(HTW);
  //Page为要导出的对象,当前是Page,如果是DataGrid,DataList等都可以
  Response.Buffer=true;
  Response.Clear();
  Response.ClearContent();
  Response.ClearHeaders();
  Response.ContentType = "Response.ContentType";
  //Response.ContentType是输出流的 HTTP MIME 类型
  //Response.ContentType --- word文件
  //application/vnd.ms-excel --- excel文件
  Response.Charset="utf-8";
  Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");
  Response.AddHeader("Content-Disposition", "attachment;filename=XXX.doc");
  //attachment --- 作为附件下载
  //inline --- 在线打开
  //filename如过是中文,则可以用HttpUtility.UrlEncode(fileName,System.Text.Encoding.UTF8)进行编码,以解决文件名乱码的问题
  Response.Write(SW.ToString());
  Response.Flush();
  Response.Close();
  2.实现方法
  列出.net实现导出Word、Exce格式文件调用的具体方法,代码如下:
/**//// <summary>
        /// 将Web控件导出
        /// </summary>
        /// <param name="source">控件实例</param>
        /// <param name="type">类型:Excel或Word</param>
        public void ExpertControl(System.Web.UI.Control source, DocumentType type)
        {
            string OutPutName = "文档名称" + DateTime.Now.ToString("yyyyMMdd");
            //设置Http的头信息,编码格式
            if (type == DocumentType.Excel)
            {
                //Excel
                Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(OutPutName, System.Text.Encoding.UTF8) + ".xls");
                Response.ContentType = "application/ms-excel";
            }
            else if (type == DocumentType.Word)
            {
                //Word
                Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(OutPutName, System.Text.Encoding.UTF8) + ".doc");
                Response.ContentType = "application/ms-word";
            }
            Response.Charset = "UTF-8";  
            Response.ContentEncoding = System.Text.Encoding.UTF8;  

            //关闭控件的视图状态
            source.Page.EnableViewState =false;  

            //初始化HtmlWriter
            System.IO.StringWriter writer = new System.IO.StringWriter() ;
            System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(writer);
            source.RenderControl(htmlWriter);  

            //输出
            Response.Write(writer.ToString());
            Response.End();
        }

        //文档类型
        public enum DocumentType
        {
            Word,
            Excel
        }
  调用方法:
  ExpertControl(this, DocumentType.Word);
  这是将整个页面导出为Word
  //this可以为具体的控件如datagrid/dataList或page表示当前页,DocumentType为导出的文件格式(Excel/word)
  注意:当为datagrid或dataList控件时,在导出Excel/word文件时,必须把控件的分页、排序属性去除并重新绑定,否则将出现
  "类型“DataGridLinkButton”的控件“DataGrid1__ctl14__ctl1”必须放在具有 runat=server 的窗体标记内。"错误!