众所周知,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=打印 .all.WebBrowser.ExecWB(6,1)>
<input
type=button value=直接打印 .all.WebBrowser.ExecWB(6,6)>
<input
type=button value=页面设置 .all.WebBrowser.ExecWB(8,1)>
<input 
type=button value=打印预览 .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 impers/>到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文件,

大家可能觉得上面的代码比较复杂,因为上面对于对打印要求比较高的应用,是十分有效的。如果只是单单对数据进行导出,还可以使用简单的格式,比如使用以下的代码:

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中设置为启动或提示。代码如下:

<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/hdjjun/archive/2008/06/17/1223753.html

ASP.NET中数据库数据导入Excel并打印相关推荐

  1. python excel模板 生成excel表格_python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图...

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 #coding=utf-8 from openpyxl importload_workbookfro ...

  2. python导入excel数据-如何把python中的数据导入excel

    python将数据导入excel的方法:1.在python官网下载xlrd第三方库:2.利用xlrd中的open_workbook函数读入excel文件,即可在python中导入excel数据. 一. ...

  3. 将数据库数据导入Excel表格

    目录 导入依赖 生成表格代码 导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId> ...

  4. 用python将txt文本中的数据导入excel

    前几天货金小组课程报告,组长派了个任务让把paper中的表格数据做成突表,实在是懒得一个个数据手敲上excel,寻思着能不能写个小代码直接导入excel[结果本菜鸡捣鼓了超久,菜鸡本菜] 首先将论文中 ...

  5. ASP.NET中GridView数据导出EXCEL小结

    本周按业务部门的要求,做一个客户拜访登记管理的小程序(B/S模式),在这里面用到了GridView来显示根据条件查询到的数据,但业务部门同时要求数据要导出为EXCEL方面使用,在网上查找了很多资料,汇 ...

  6. mysql数据导入python_利用python将mysql中的数据导入excel

    原博文 2017-06-29 13:29 − Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 如下分别利用xlwt和openpyx ...

  7. asp excel导入mysql_asp实现excel中的数据导入数据库

    asp实现excel中的数据导入数据库 wenjian = request.Form("select") '获取文件扩展名 ext = FileExec(wenjian) '判断文 ...

  8. 将excel中是数据导入数据库

    2019独角兽企业重金招聘Python工程师标准>>> 将excel中是数据导入数据库 1.利用excel生成sql语句: 列如: 1).insert: =CONCATENATE(& ...

  9. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...

     本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    (三)SSIS的简介    (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介 ...

最新文章

  1. 移动端自动化==Appium定位方式总结
  2. 开发环境 测试环境 定义_「PHP7数组详解」:第1章 环境搭建安装(一)
  3. (Mybatis)缓存
  4. 【企业管理】正确评价价值-概述
  5. graph 关系图 设置
  6. Java常用系统变量收集
  7. SpringBoot 中配置加载优先级
  8. 【Daily Scrum】11-26
  9. react 文本框_React自动完成文本框
  10. UI2CODE智能生成代码——组件识别篇
  11. linux内存管理(十五)-内存池
  12. request之额外路径
  13. 能识别nvme的pe启动_【腾讯WeTest干货分享】机器学习在启动耗时测试中的应用及模型调优...
  14. LoadRunner 11 安装及破解
  15. 万兆交换机用什么网线_千兆网线和万兆网线有什么区别
  16. LaTeX各种算法排版
  17. android仿今日头条App、多种漂亮加载效果、选择器汇总、记事本App、Kotlin开发等源码
  18. PyQt之QSS美化
  19. php 邮件上传类阿里云邮件上传接口
  20. 一键修复“一看就会,一学就废”bug——动态规划

热门文章

  1. 查看linux下各数据类型的大小
  2. C++class默认生成4个函数
  3. UA MATH567 高维统计专题1 稀疏信号及其恢复5 LASSO的估计误差
  4. 常微分方程I ODE的例子1 弹簧的振动、RLC电路与单摆
  5. C# 使用new 关键字显式隐藏从基类继承的成员和内部类的使用
  6. 超图桌面版创建基本三维对象(点、线、面、体、粒子系统)的基本操作
  7. react-native 打包apk
  8. [Vani有约会]雨天的尾巴 (线段树合并)
  9. 自写网站阶段之:终结篇
  10. 触发器deleted 表和 inserted 表详解(转)