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 编辑 ]