软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|开发客
您现在的位置: 天极网 > 开发频道 > .net实现导出Word、Excel格式文件
全文

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

2008-06-21 07:00作者:cnblogs 飛雪飄寒 出处:天极网责任编辑:nancy

  在做.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)
        {
            //设置Http的头信息,编码格式
            if (type == DocumentType.Excel)
            {
                //Excel
                Response.AppendHeader("Content-Disposition","attachment;filename=result.xls");
                Response.ContentType = "application/ms-excel";
            }
            else if (type == DocumentType.Word)
            {
                //Word
                Response.AppendHeader("Content-Disposition","attachment;filename=result.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 的窗体标记内。"错误!

共3页。 1 2 3 下一页 末页
相关搜索:
关注此文读者还看过
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众