ASP.NET中数据库数据导入Excel并打印(转载)

众所周知,WEB上的打印是比较困难的,常见的WEB上打印的方法大概有三种:
  
    1、直接利用IE的打印功能。一般来说,这种方法可以做些扩展,而不是单单的调用javascript:print()这样简单,比如,可以使用如下代码:
  
  <OBJECT
  id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0>
  </OBJECT>
  <input
  type=button value=打印 οnclick=document.all.WebBrowser.ExecWB(6,1)>
  <input
  type=button value=直接打印 οnclick=document.all.WebBrowser.ExecWB(6,6)>
  <input
  type=button value=页面设置 οnclick=document.all.WebBrowser.ExecWB(8,1)>
  <input
  type=button value=打印预览 οnclick=document.all.WebBrowser.ExecWB(7,1)>
  
    这种方法可以适用于简单的数据打印,对系统要求不高,但不足之处在于可以控制的能力比较差,比如处理分页等问题。
  
    2、利用水晶报表或其他第三方工具,如微软的Reporting service。水晶报表或其他第三方控件的打印,一般是导出到Excel,WORD,PDF等再进行打印的,效果比较好,但编程比较复杂,控制起来也不大方便,而且这些工具都是要收费的。
  
    3、将数据库的数据或要打印的内容导出到Excel,Word中去打印。使用这种方法,可以在服务端或者客户端进行。在服务端使用的话,要求服务端要安装Word,Excel,在客户端使用的话,要求客户端在IE的安全设置上有一定要求。使用这种方法,可适应性比较强,控制较好。本文将以在ASP.NET中使用Excel为例子,介绍如何将数据导出到Excel的几种方法。
  
    首先,先介绍在服务端使用Excel的方法。要在服务器端使用Excel,必须要求服务器端安装Excel,并且要求一定的访问权限。比如,需要添加<identity impersonate="true"/>到web.config中。在本文中,要给予WEB目录可写的权限。
  
    接下来,使用VS.NET 2003新建一个VB.NET的工程,并添加引用。由于我们要使用的是Excel,所以添加一个关于COM的应用,这里添加的是Microsoft Excel Object Library,之后,添加的代码如下:
  
  Imports System.Runtime.InteropServices.Marshal
  Imports Office
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   '以COM方式处理Excel
   Dim oExcel As New Excel.Application
   Dim oBooks As Excel.Workbooks, oBook As Excel.Workbook
   Dim oSheets As Excel.Sheets, oSheet As Excel.Worksheet
   Dim oCells As Excel.Range
   Dim sFile As String, sTemplate As String
   '定义一个datatable
   Dim dt As DataTable = CType(Application.Item("MyDataTable"), DataTable)
  
   sFile = Server.MapPath(Request.ApplicationPath) & "\MyExcel.xls"
   '定义模版文件
   sTemplate = Server.MapPath(Request.ApplicationPath) & "\MyTemplate.xls"
   oExcel.Visible = False
   oExcel.DisplayAlerts = False
   '定义一个新的工作簿
   oBooks = oExcel.Workbooks
   oBooks.Open(Server.MapPath(Request.ApplicationPath) & "\MyTemplate.xls") oBook = oBooks.Item(1)
   oSheets = oBook.Worksheets
   oSheet = CType(oSheets.Item(1), Excel.Worksheet)
  
   '命名该sheet
   oSheet.Name = "First Sheet"
   oCells = oSheet.Cells
   '调用dumpdata过程,将数据导入到Excel中去
   DumpData(dt, oCells)
   '保存
   oSheet.SaveAs(sFile)
   oBook.Close()
  
   '退出Excel,并且释放调用的COM资源
   oExcel.Quit()
   ReleaseComObject(oCells) : ReleaseComObject(oSheet)
   ReleaseComObject(oSheets) : ReleaseComObject(oBook)
   ReleaseComObject(oBooks) : ReleaseComObject(oExcel)
   oExcel = 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文件,如下图:
   218370.jpg
大家可能觉得上面的代码比较复杂,因为上面对于对打印要求比较高的应用,是十分有效的。如果只是单单对数据进行导出,还可以使用简单的格式,比如使用以下的代码:
  
  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制表符分隔,最后再输出到浏览器,输出效果如下图:
   218372.jpg
    上面的这种方法,表现的形式比较简单,但也可以满足数据导出的基本要求。那如果要进一步修饰一下的话,要如何做呢?这里提供一个方法,可以将要导出的数据先绑定到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
  
    打印出来的效果如下图:
   218381.jpg
    如果要转到Word里面打印的话,也同样可以用上面的方法,只需要将其中的代码改成:
  
  Response.ContentType = "application/ms-word"
  Response.AddHeader("Content-Disposition", "inline;filename=test.doc")
  
    最后,来看一下,如何调用客户端的Excel进行打印,就是让客户一点击"打印"的按钮,就可以自动打开客户端的Excel,将要打印的内容导入。要实现这样的效果,必须要求客户端的IE浏览器设置中,在其中的"安全-本地Intranet-自定义级别中",将"下载未签名ACTIVX"中设置为启动或提示。代码如下:
  
  <script language="vbscript">
   Sub exportbutton_onclick
    Dim sHTML, oExcel, oBook
    SHTML = document.all.item("DataGrid1").outerhtml
    Set oExcel = CreateObject("Excel.Application")
    Set oBook = oExcel.Workbooks.Add
    oBook.HTMLProject.HTMLProjectItems("Sheet1").Text = sHTML
    oBook.HTMLProject.RefreshDocument
    oExcel.Visible = true
    oExcel.UserControl = true
   End Sub
  </script>
  
    在CODE-BEHIND的代码中,只需要这样写就可以了:
  
  Dim dt As DataTable = CType(Application.Item("MyDataTable"), DataTable)
  DataGrid1.DataSource = dt
  DataGrid1.DataBind()
  
    当运行程序时,用户只需要点击EXPORT TO Excel的按钮,此时IE浏览器会提示是否允许ACTIVX控件交互,则选择"是",就可以打开客户端的Excel进行打印操作了。
  
    以上是在ASP.NET中,常用的几种对Excel进行操作的方法,各有优劣,希望大家可以根据实际情况选用。

转载于:https://www.cnblogs.com/BpLoveGcy/archive/2005/05/24/161796.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
控件功能强大,却简单易用,所有调用如同JavaScript扩展语句, 主要接口函数如下: PRINT_INIT 打印初始化 SET_PRINT_PAGESIZE 设定纸张大小 ADD_PRINT_HTM 增加超文本项 ADD_PRINT_TEXT 增加纯文本项 ADD_PRINT_TABLE 增加表格项 ADD_PRINT_SHAPE 画图形 SET_PRINT_STYLE 设置对象风格 PREVIEW 打印预览 PRINT 直接打印 PRINT_SETUP 打印维护 PRINT_DESIGN 打印设计 ... 样例清单 1.如何在页面内嵌入控件见样例一 2.如何选材打印当前页面内容见样例二 3.如何用代码生成打印页见样例三 4.如何打印设计和定位套打见样例四 5.如何控制纸张大小和连续打印见样例五 6.如何输出多页长文档及双面打印见样例六 7.如何定向输出见样例七 8.如何打印图片见样例八 9.如何用程序加载打印维护背景图见样例九 10.如何控制打印样式(STYLE)见样例十 11.如何直接打印条形码见样例十一 12.如何读写本地文件见样例十二 13.如何打印旋转内容见样例十三 14.如何按URL打印见样例十四 15.如何打印表格的页头页尾见样例十五 16.如何设置预览窗口大小见样例十六 17.如何发打印机指令或直接读写端口见样例十七 18.如何打印幅面高度不固定的票据见样例十八 19.如何内嵌显示及预览时包含背景图见样例十九 20.如何强制分页并预览多页卡片见样例二十 21.如何控制打印维护的功能权限见样例二十一 22.如何构建自己的纯WEB打印预览见样例二十二 23.如何居打印超文本见样例二十三 24.如何选择界面皮肤见样例二十四 25.如何指定输出到哪页或仅预览见样例二十五 26.如何提高多页打印的性能见样例二十六 27.如何导出数据Excel文件见样例二十七 28.如何快速读取客户端系统信息见样例二十八 29.如何使用其它长度单位见样例二十九 30.如何分页输出页面内容见样例三十 31.如何打印表格的分页小计或合计见样例三十一 32.如何实现清晰的图表打印见样例三十二 33.如何实现甘特图等的图表打印见样例三十三 34.如何使用百分比%和满页打印见样例三十四 35.如何获得打印结果和程序代码见样例三十五 36.如何在设计过程用js编辑内容见样例三十六 37.如何打印公章效果图见样例三十七 38.如何用BASE64编码输出图片见样例三十八 39.如何打印田字格、上划线等文本见样例三十九 40.如何进行数据格式转换见样例四十 41.如何把内容关联后按顺序打印见样例四十一 42.如何把整页内容缩放打印见样例四十二 43.如何分页打印综合表格见样例四十三 44.如何缩放打印单个超文本内容见样例四十四 45.如何获得打印状态及最终结果见样例四十五 46.如何设置右边距和下边距见样例四十六
打印机语言:PPLB 插件安装包: ArgoxWebPrintSetup.msi API类库名称:ArgoxWebPrint 操作系统:WindowsXP, Windows7 32/64bit 运行环境:IE6以上 程序测试页面:PrintDemoPage.htm 发行日期:2014-04-17 ******************************************************************************* 注意事项 =============================================================================== 1. 连接打印机开始运行PrintDemoPage.htm打印测试前,请先确认 - ArgoxWebPrintSetup.msi是否已安装完成。 - 打印机驱动是否已安装完成。 2. 请使用IE浏览器开启PrintDemoPage.htm页面,并在下方提示点击允许IE运行此ActiveXP程序。 3. 插件安装软件包名称为:Setup_ArgoX.msi,必须安装在客户端电脑。 4. 打印机接口函数用法请参阅下方说明,JS的调用方式请参考PrintDemoPage.htm脚本。 5. 你应该将DLL档案放置在哪儿? 若使用32位元的DLL: A.将DLL档案和应用程式放在同一目录下.(这是最好的方法) B.在Windows 32位元作业系统, 将DLL档案放置在\Windows\System32目录. C.在Windows 64位元作业系统, 将DLL档案放置在\Windows\Syswow64目录. 若使用64位元的DLL: A.将DLL档案和应用程式放在同一目录下.(这是最好的方法) B.在Windows 32位元作业系统, 无法使用 64位元的DLL. C.在Windows 64位元作业系统, 将DLL档案放置在\Windows\Syswow64目录. 6. 以下范例为 C# 的范例,其他程式语言不一定完全相同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值