您好, 访客   登录/注册

WEB页面打印及导出EXCEL文档的方法

来源:用户上传      作者: 赵瑛

  【摘 要】本文以多项有关地质录井生产软件的开发经验为实例,阐述了在php编程中使用javascript语言实现WEB页面打印及导出EXCEL文档的方法和技巧。主要探讨针对不同需求实现不同打印方法和不同导出方式的优缺点及相应技术关键等问题,从而总结出,相对于Windows桌面应用程序来讲,Web应用程序因为其特殊的呈现方式有种种限制,目前没有一种方案可解决所有打印和导出问题,需针对不同用户需求使用不同解决方法。
  【关键词】php web excel javascript
  在多项地质录井生产软件的开发中,当涉及到有关Wed软件的开发过程中,需要用到网页数据表打印和EXCEL导出功能,以满足不同人员的需求,开发中经多种方法比较、测试,找到了满足开发要求的具体方法,实现了WEB网页中表格的打印和EXCEL转换功能,改变了网页表格传统管理方式。
  下面以有关地质录井生产软件的开发经验,论述一下如何使用php、javascript语言实现浏览器端打印和EXCEL导出功能。
  1 网页中表格的打印
  Web网开发软件面临一个难题,那就是打印。相对于Windows桌面应用程序来讲,Web应用程序的打印有种种限制,在项目开发过程中经常会遇到用户不同的需求。 做过桌面应用开发的人都会非常熟悉水晶报表、Active Report之类的报表控件,它们不仅有简单灵活的设计界面,更具有非常强大的报表功能,能满足各种报表的打印需求。而Web应用则因为其特殊的呈现方式,只能寻求其他的解决方案。现在分析一下目前已经成形的Web打印方案。
  1.1 用IE打印网页
  IE5.0以上版本拥有强大的打印及打印预览功能。在IE中打印网页非常简单。只需点一下工具栏上“打印”按钮就可将当前网页打印出来。
  下面简要介绍如何设置一些打印参数。
  如果我们直接点工具栏的“打印”按钮或点“文件”菜单中的“打印”进行打印这个网页的话,就会打印出很多不必要的信息。所以在打印前我们应先用IE新增的“打印预览”功能查看当前网页的实际打印效果。
  在“打印预览”对话框中,我们可以看到,网页标题、网页的URL地址及打印日期等我们所不需要的信息也被打印出来了。而页码又在右上角。 如果需要按照我们所想要的样式来打印网页,可以在“页面设置”中改变。方法如下。
  选择浏览器上面文件菜单中的“页面设置”对话框,所有的设置都在这里!
  IE自动给我们在页眉和页脚处加上了一些不必要的打印信息。如果不想要任何页眉和页脚的话,直接删除它们就行了。
  按照上面设置好后,你就可以打印了。但有时会发现,网页中的一些图像在打印时不见了。因为IE的默认设置是不打印网页的背景颜色和图像。只需进入IE的Internet选项将它选中(打上勾)就行了。具体操作方法是:点IE的主菜单中的“工具”――“Internet选项”――再在弹出的对话框中占击“高级”选项卡,找到“打印背景颜色和图像”一项。然后将“打印背景颜色和图像”的选项打上勾,再点“确定”就可以了。
  至此,我们就完成了对IE的打印设置。接下来,只要我们没有关闭IE,我们就可以一直使用上述设置进行打印。打印前一般先进行打印预览,效果满意后再开始打印。
  这种打印方式的特点是操作比较简单,也是常用的打印方式,只需要将报表页面设计好,用户通过IE菜单中的打印功能完成打印。优点是简单,容易实现。
  1.2 ScriptX打印组件
  对于简单的打印,我们用IE的功能就可以了,对于需要复杂设置的,使用ActiveX打印方式是比较理想的,只需要客户端下载一个很小的打印插件,客户端无需安装任何C/S的格式设计器,就可以轻松实现打印格式的自定义,打印参数的自定义等等。
  这种方案表格的数据不再以html方式呈现,而是呈现在ActiveX中。这种方案的优点是打印的精确度高,分页的可控性好,比如预定义纸型,设置打印方向,打印边距,指定打印机,不弹出打印对话框直接打印等等。不必每次手工设定。DHTML+javascript编辑打印数据的格式展现,实现格式的自定义。实现动态获取打印数据。
  使用范围:该组件针对打印定位要求不是非常严格、大篇幅的文档非常好用,但是对定位要求非常严格的报表不适合。
  1.3 将报表导出成Word,Excel或PDF形式打印
  这种方式需要将页面导出成Office文档或pdf,最低的要求是客户端已经安装用以打开Word、Excel或Pdf文档的软件。这种方式可以通过水晶报表组件或其他一些第三方控件来实现。导出成Pdf形式后打印质量和效果都很好,导出成Word或Excel后用户可以自定义打印的内容和格式。
  总之,现有的打印方案各有所长,在开发过程中应根据用户的需求作选择,利用IE打印简单,容易实现,在用户需求简单或打印内容较少的情况下采用此方案比较适宜。利用控件打印可以实现完全自定义,但需要较高的技术要求和开发周期,利用导出的方式则可以满足用户需要自定义或打印内容有多页的需求。
  2 网页中表格的EXCEL导出
  随着BS体系结构的广泛使用,相对应的数据保存技术也需改进,对应Web页面,也就是我们通常在浏览器看到的HTML文件,由标示关键字与数据混合组成的文件。Web页面数据导出简单地说,就是分离数据与格式,同时保存数据为另外一种格式。
  通过网页形式生成excel文件供用户下载,以达到数据导出的功能,首先需要修改http response等文件头信息,修改后执行此页面会弹出窗口,提示下载到本地excel表格中,这种非实际在服务器端生成文件的优点就是:对于并发请求该页面的用户来说不会发生服务器端文件同名覆盖的问题。其次需要使用Javascript语言实现表格数据及样式的读取,下面简单地介绍几种在技术上常用的读取方法。   2.1 Javascript实现把网页中table的内容导入到excel中有以下几种方法
  (1)直接拷贝整个表格到EXCEL中;(2)通过遍历表格,给EXCEL中相应的单元格赋值;(3)把表格中的内容提取出来,利用IE另存为.csv的格式。
  各方法的优点:(1)直接拷贝表格,能够保留表格中的原有的格式,比如,列,行的合并,对齐方式,底色等等;(2)通过遍历表格,比较灵活,可以遍历表格某些需要部分的内容;(3)利用IE的另存为,不用创建ActiveXObject对象,可以处理表格合并方面的问题。
  各方法的缺点:(1)可能弹出脚本错误:Automation不能创建对象。解决方法:启用IE安全设置中对没有标记为安全的ActiveX控件进行初始化和脚本运行。由于整个表格复制到EXCEL中,给表格加个标题,并加入到EXCEL中。(2)可能弹出脚本错误:Automation不能创建对象(解决方法如上)。
  单元格合并时可能会出现问题,解决方法:合并单元格后再写数据。(3)表格格式复杂时,会有问题,(rowspan>1 or colspan>1),解决方法:一般都是表头格式比较复杂,可先把表头固定,然后再循环写其他数据。
  2.2 EXCEL大数据量导出的解决方案
  由于excel本身最多支持65535行数据,在数据量较大的情况下,需要将整个数据分块,利用excel的多sheet页的功能,将超出65535行后的数据写入到下一个sheet页中,即通过多sheet页的方式,突破了最高65535行数据的限定。下面就给出大数据量导出到excel的具体解决办法。
  首先,通过php程序判断报表行数,超过65535行后分SHEET写入。在这种大数据量的报表生成和导出中,要占用大量的内存,容易发生内存溢出的情况。此时的内存开销主要是两部分,一部分是该报表生成时的开销,另一部分是该报表生成后写入一个EXCEL时的开销。对于此种情形,开发中使用如下方法解决。
  将该报表设置起始行和结束行参数,在API生成报表的过程中,分步计算报表,比如一张20万行数据的报表,在生成过程中,可通过起始行和结束行分4-5次进行。这样,就降低了报表生成时的内存占用,在后面报表生成的过程中,如果发现内存不够,可回收前面报表的缓存。
  导出EXCEL的过程,放在每段生成报表之后立即进行,改多个SHEET页为多个EXCEL,即在分步生成报表的同时分步生成EXCEL,则生成EXCEL的内存消耗也得以降低。通过多次生成,同样可以在后面EXCEL生成所需要的内存不足时,有效回收前面生成EXCEL时占用的内存。
  再使用文件操作,对每个客户端的导出请求在服务器端根据SESSIONID和登陆时间生成唯一的临时目录,用来放置所生成的多个EXCEL,然后调用系统控制台,打包多个EXCEL为RAR或者JAR方式,最终反馈给用户一个RAR包或者JAR包,响应客户请求后,再次调用控制台删除该临时目录。
  使用这种方法,首先是通过分段运算和生成,有效降低了报表从生成结果到生成EXCEL的内存开销。其次是通过使用压缩包,响应给用户的生成文件体积大大缩小,降低了多用户并发访问时服务器下载文件的负担,有效减少多个用户导出下载时服务器端的流量,从而达到进一步减轻服务器负载的效果。
  3 结语
  本文通过对多项地质录井生产软件开发成果的经验总结,对Wed软件开发中使用的WEB页面打印及EXCEL导出的方法深入分析和总结,论述了使用WEB页面打印及EXCEL导出的基本方法和技巧。相对于Windows桌面应用程序来讲,Web应用程序因为其特殊的呈现方式有种种限制,目前没有一种方案可解决所有打印和导出问题,需针对不同用户需求使用不同解决方法。
  参考文献:
  [1](麦 奇 编著).《深入PHP4编程技术》.人民邮电出版社,1997.2.
  [2](美)Scott Urman 著.《ORACLE8 PL/SQL 程序设计》.机械工业出版社,1998.6.
转载注明来源:https://www.xzbu.com/8/view-7569679.htm