Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->ASP.NET ->正文

ASP.NET中数据库数据导入Excel并打印

来源:Linuxdby.com 作者:Webmaster 时间:2007-04-12 点击: [收藏] [投稿]
= Nothing : oBooks = Nothing : oBook = Nothing
  oSheets = Nothing : oSheet = Nothing : oCells = Nothing
  System.GC.Collect()
  Response.Redirect(sFile)
  End Sub
  
  '把DATATABLE的内容导出到Excel的单元格中去
  Private Function DumpData(ByVal dt As DataTable, ByVal oCells As Excel.Range) As String
  Dim dr As DataRow, ary() As Object
  Dim iRow As Integer, iCol As Integer
  
  '输出列标题
  For iCol = 0 To dt.Columns.Count - 1
  oCells(2, iCol + 1) = dt.Columns(iCol).ToString
  Next
  
  '把数据导出到相应的单元格
  For iRow = 0 To dt.Rows.Count - 1
  dr = dt.Rows.Item(iRow)
  ary = dr.ItemArray
  For iCol = 0 To UBound(ary)
  oCells(iRow + 3, iCol + 1) = ary(iCol).ToString
  Response.Write(ary(iCol).ToString & vbTab)
  Next
  Next
  End Function
  End Class
  
  在上面的代码中,首先,先定义了一些关于Excel的对象,如application,workbook,sheets,sheet等,这些都是在使用Excel的COM对象时,必不可少的。之后,我们事先先定义了一个Excel的模版文件,并且用Excel先打开这个模版文件,再调用一个自定义的过程dumpdata。在这个自定义的过程中,把datatable中的数据,逐一导入到Excel的单元格中去。读者自己可以慢慢体会下,上面的代码中,是怎么样把datatable中的数据导出到Excel中去的。程序运行后,可以在当前的工作目录下,生成名为myExcel.xls的Excel文件,如下图:
   
  大家可能觉得上面的代码比较复杂,因为上面对于对打印要求比较高的应用,是十分有效的。如果只是单单对数据进行导出,还可以使用简单的格式,比如使用以下的代码:
  
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim dt As DataTable = CType(Application.Item("MyDataTable"), DataTable)
  
  Response.ContentType = "application/ms-Excel"
  
  Response.AddHeader("Content-Disposition", "inline;filename=test.xls")
  
  Response.Write(ConvertDtToTDF(dt))
  End Sub
  
  Private Function ConvertDtToTDF(ByVal dt As DataTable) As String
  Dim dr As DataRow, ary() As Object, i As Integer
  Dim iCol As Integer
  
  ' 输出列标题
  For iCol = 0 To dt.Columns.Count - 1
  Response.Write(dt.Columns(iCol).ToString & vbTab)
  Next
  Response.Write(vbCrLf)
  
  '输出数据
  For Each dr In dt.Rows
  ary = dr.ItemArray
  For i = 0 To UBound(ary)
  Response.Write(ary(i).ToString & vbTab)
  Next
  Response.Write(vbCrLf)
  Next
  End Function
  End Class
  
  在上面的代码中,首先把浏览器的输出类型设置为application/ms-Excel,并设置Excel的输出类型是在浏览器中输出,默认的名字为test.xls,之后,把调用自定义的过程,该自定义的过程把一个datatable里的数据以字符串流的形式输出,其中每个datatable里的数据之间以TAB制表符分隔,最后再输出到浏览器,输出效果如下图:
   
  上面的这种方法,表现的形式比较简单,但也可以满足数据导出的基本要求。那如果要进一步修饰一下的话,要怎么样做呢?这里提供一个方法,可以把要导出的数据先绑定到datagrid,然后再打印该datagrid。这时就可以对要打印出来的datagrid进行格式化,设置datagrid的format等属性。代码如下:
  
  Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
  Dim dt As DataTable = CType(Application.Item("MyDataTable"), DataTable)
  
  Response.ContentType = "application/ms-Excel"
  
  Response.AddHeader("Content-Disposition", "inline;filename=test.xls")
  
  DataGrid1.DataSource = dt
  DataGrid1.DataBind()
  DataGrid1.RenderControl(writer)
  End Sub
  
  打印出来的效果如下图:
  
  如果要转到Word里面打印的话,也同样可以用上面的方法,只需要把其中的代码改成:
  
  Response.ContentType = "application/ms-word"
  Response.AddHeader("Content-Disposition", "inline;filename=test.doc")
  
  最后,来看一下,怎么样调用客户端的Excel进行打印,就是让客户一点击"打印"的按钮,就可以自动打开客户端的Excel,把要打印的内容导入。要实现这样的效果,必须要求客户端的IE浏览器设置中,在其中的"安全-本地Intranet-自定义级别中",把"下载未签名ACTIVX"中设置为启动或提示。代码如下:

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇: WEB开发之ASP.NET 验证控件安全隐患技术   下一篇: ASP.NET Starter Kit开始 Web 站点开发

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号