Board logo

标题: ASP.NET2.0导出页面对象到WORD,EXCEL等文件 [打印本页]

作者: php    时间: 2007-12-17 17:11     标题: ASP.NET2.0导出页面对象到WORD,EXCEL等文件

这段时间在做一个.NET的网站,收获良多,其中大多来自网友们的原创,学习之余,汗颜发点小心得与各位探讨.由于做的项目很多地方要求将一些页面导出为WORD,或者EXCEL文件.于是网上找了很多方法,总结了一些网友的经验,写了一个通用的页面导出函数(vb.net).通过制定pageobject可以很精细的控制导出整个页面或者一部分.
#Region "导出页面对象到excel和word等文件"
    ''' <summary>
    ''' 导出到页面对象到excel和word等文件
    ''' </summary>
    ''' <param name="fileType">导出类型(excel,word ,txt,html 或其他浏览器可直接支持文档类型)</param>
    ''' <param name="fileName">要导出的文件名(包括扩展名)</param>
    ''' <param name="pageObject">要导出的页面对象('Me表示输出本页所有对象,你也可以绑定gridview,table,td,form,或其他支持obj.RenderControl()属性的控件)</param>
    ''' <remarks></remarks>

    Public Sub exportFile(ByVal fileType As String, ByVal fileName As String, ByVal pageObject As Object)

        HttpContext.Current.Response.Clear()

        HttpContext.Current.Response.Buffer = True

        HttpContext.Current.Response.Charset = "utf-8"

        '下面这行很重要, attachment 参数表示作为附件下载,您可以改成 online在线打开

        'filename=FileFlow.xls 指定输出文件的名称,注意其扩展名和指定文件类型相符,可以为:.doc    .xls    .txt   .htm  

        HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" & fileName)

        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8")

        'Response.ContentType指定文件类型 可以为application/ms-excel    application/ms-word    application/ms-txt    application/ms-html    或其他浏览器可直接支持文档 

        HttpContext.Current.Response.ContentType = "application/ms-" & fileType

        pageObject.EnableViewState = False

        '定义一个输入流  

        Dim oStringWriter As StringWriter = New System.IO.StringWriter()

        Dim oHtmlTextWriter As HtmlTextWriter = New System.Web.UI.HtmlTextWriter(oStringWriter)

        '将目标数据绑定到输入流输出  

        pageObject.RenderControl(oHtmlTextWriter)

        HttpContext.Current.Response.Write(oStringWriter.ToString())

        HttpContext.Current.Response.End()

    End Sub
#End Region



下面是调用示例:在要导出的页面调用exportfile方法,将页面中ID=Table1的table导出到word文件11.doc中

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        ctrl.exportFile("word", "11.doc", Me.Table1)
    End Sub
    Public Overrides Sub verifyrenderinginserverform(ByVal control As Control)

    End Sub

其中重载了verifyrenderinginserverform这个函数(注意函数体是空的),否则可能出现错误提示(原因未知,望大牛指点)。
类型“XXXXX”的控件“xxxxxxx”必须放在具有 runat=server 的窗体标记内.

[ 本帖最后由 php 于 2007-12-17 17:13 编辑 ]
作者: beel    时间: 2009-7-31 09:46

应该整理为册




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0