使用下面的代码
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();可以生成word文档,但是页面上有许多textbox、datagrid等类型的服务器控件,这些控件里的数据没有显示,请问应该怎么做?

解决方案 »

  1.   

    一般是先让客户在网页中查得结果,再单独给个链接生成word文档。生成word文档的链接是打开新窗口。这样就显示生成两不误了。
      

  2.   

    能不能再详细一点,aspx里有许多textbox之类的,数据从数据库取来了,现在另有一个页面来显示?数据从这个页面传递过去还是?
      

  3.   

    可以在页面中动态生成一个只有数据的document
    然后根据这个document来导出成word貌似word认标准的html的你可以直接导出成html文件,只是后缀名是.docup
      

  4.   

    protected override void Render( HtmlTextWriter writer )
    {
    System.IO.StringWriter html = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
    base.Render(tw);
    System.IO.StreamWriter sw;
    sw = new System.IO.StreamWriter(Server.MapPath("doc.htm"), false, System.Text.Encoding.Default);
    sw.Write(html.ToString());
    sw.Close();
    tw.Close();
    Response.Write(html.ToString());
    } 可以生成静态页面
      

  5.   

    在静态页面里再用:
    <script   >   
    function   AllAreaWord()     
    {   
        if(document.all( "tab ").rows.length==0)   
        {   
          alert( "没有内容可导! ");   
          return;   
        }   
        try{   
          var   oWD   =   new   ActiveXObject( "Word.Application ");     
        }catch(e)   
        {   
          alert( "无法调用Office对象,请确保您的机器已安装了Office并已将本系统的站点名加入到IE的信任站点列表中! ");   
          return;   
        }   
    var   oDC   =   oWD.Documents.Add( " ",0,1);     
    var   oRange   =oDC.Range(0,1);     
    var   sel   =   document.body.createTextRange();     
    sel.moveToElementText(tab);   //tab   为导出数据所在的表格ID   
    sel.select();     
    sel.execCommand( "Copy ");     
    oRange.Paste();   
    oWD.Application.Visible   =   true;     
    }   
    </script   >