众所周知,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文件,如下图:
   
  大家可能觉得上面的代码比较复杂,因为上面对于对打印要求比较高的应用,是十分有效的。如果只是单单对数据进行导出,还可以使用简单的格式,比如使用以下的代码:
  
  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

转载于:https://www.cnblogs.com/mojun/archive/2012/03/23/2414247.html

把数据导出Excel相关推荐

  1. 将页面中表格数据导出excel格式的文件(vue)

    近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安 ...

  2. Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表...

    在上一篇博客中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生 ...

  3. Controller数据导出Excel 详细教程——easypoi-base,easypoi-web,easypoi-annotation

    Controller获取数据导出Excel,详细教程 1:导入对应依赖 <dependency><groupId>cn.afterturn</groupId>< ...

  4. DataTable中的数据导出Excel文件

    DataTable中的数据导出Excel文件 View Code ///<summary> /// 将DataTable中的数据导出到指定的Excel文件中 ///</summary ...

  5. php数据的导出到excel,php 数据的导出到excel表格-怎么将php数据导出excel

    怎么使用php把表格中的数据导入到excel中 下面写的一个PHP导出数据到CSV问价的函数,你到时候直接调用了 /** * 导出CSV * @param string $fileName文件名字 * ...

  6. 大量数据导出Excel方案

    序 最近可能会遇到大量数据导出Excel的场景,今天趁现在需求告一段落来做下技术预研,然后这里就顺便分享给大家. 一.数据量预判 因为我们是做物联网的,这里要导出的数据就是设备的上报数据.客户说要这些 ...

  7. 在vue中把数据导出Excel文件

    在vue中把数据导出Excel文件 第一次尝试写文章 在vue中把数据导出成Excel格式的文件,话不多,上代码: 第一步我们要先安装几个集成的插件 npm install -S file-saver ...

  8. JSON数据导出Excel表

    JSON数据导出Excel表 应老板要求写了一个实用的小功能,需求是将api接口返回的JSON数据导出Excel表,过程中改了两稿,一是前端js直接导出一个表,另一是分门别类在java中同时导出多个表 ...

  9. java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法

    对于我们来说,java导出数据成excel或其他数据文件,或者下载资源是开发中的家常便饭, 但是在导出的时候,如果点击一个按钮导出几百万条数据,如果不作处理的话很可能会出现一系列的问题. 这里介绍打包 ...

  10. react 前端分页查询数据导出excel

    react 前端分页查询数据导出excel 前言 一.安装file-saver.xlsx插件 二.创建export.ts文件 三.导出方法 前言 需求:前端实现导出Table中所有数据(不止是当前页面 ...

最新文章

  1. 学习笔记 九: DNS
  2. 从Netty到EPollSelectorImpl学习Java NIO
  3. java静态方法声明_方法本地类中的Java最终静态声明
  4. 仪征市第二中学计算机老师,静心倾听花自开 ——仪征市第二中学徐丞老师
  5. Kali Linux 从入门到精通(二)-安装
  6. Java嵌入式数据库H2学习总结(一)——H2数据库入门
  7. 华为鸿蒙系统5G有什么联系,【手机|站在5G时代的路口,鸿蒙将带给我们什么?】路口|华为|鸿蒙|其他|系统|硬件_科技资讯_联盟·玩科技...
  8. 解决Git无法同步空文件夹的问题
  9. 单片机最小系统c语言报告,单片机最小系统实验报告.doc
  10. MySQL学习(三、分组查询和多表查询)
  11. 进行 HTML、JavaScript 和 Ajax 开发和调试的必用工具
  12. 使用koa托管静态资源文件
  13. 写代码常用英文及缩写
  14. linux下mariadb的服务启动异常,centos7 – CentOS 7 MariaDB错误“无法启动mariadb.service:找不到单位.”...
  15. error: <class ‘xmlrpclib.Fault‘>, <Fault 92: “CANT_REREAD: The directory named as part of the path /
  16. 国开网电大 动物常见病防治 形考任务1-5
  17. Footprint Analytics: 从多个维度带你进入 GameFi 领域
  18. Google Play搜不到自己应用
  19. 《Java并发编程的艺术》-方腾飞、魏鹏、程晓明
  20. bzoj 4453: cys就是要拿英魂!(后缀数组+二分)

热门文章

  1. Linux中字符设备注册方式,3.4. 字符设备注册
  2. linux 自动配置 mysql数据库,Linux下配置mysql数据库主从自动备份
  3. python自定义函数实例计算1-n的偶偶数和_python用户输入一个整数N,计算并输出1到N相加的和,请问这个程序错在哪里了?...
  4. python报表设计控件_使用Python快速制作可视化报表
  5. word 常用快捷键
  6. uvalive5992(搜索)
  7. 如何执行超过一百兆(100MB)的sql脚本?
  8. cmd下的一些小技巧
  9. python 全栈开发,Day79(Django的用户认证组件,分页器)
  10. Django内置的分页模块