一、选题的意义
随着计算机与互联网技术的飞速发展,当今世界上每天都会产生海量的数据,大数据时代已经到来。报表被应用于各行各业,是为企业的决策制定过程提供支持的所有类型数据和战略集合。报表系统的研究与实现对于企业管理有着非常重要的作用,员工管理在现代企业中是必不可少的一部分,它在企业的发展过程中占着主导地位,如果一个企业员工管理不好何谈发展。企业员工管理分为入职、转正、调岗、离职等环节以及各种报表的导入导出操作,现在的企业少则几十人,多则几千万人,这些复杂的信息,巨大的数据量大大增加了人事管理的难度。如果使用以前的人工纸质化管理不仅耗时耗力,而且极易出错、工作效率低、保密性差,大量的数据信息更不便于查找、修改和维护。所以报表的实现可充分满足企业员工管理的海量数据操作,提高工作效率。
二、基本内容及重点
1.实现POI加载Excel功能,创建Workbook工作簿,创建表单Sheet,创建单元格样式对象CellStyle,设置边框,字体等,通过文件流写入文件。
2.基于XSSFWork导出海量Excel报表,随着表格的不断创建,会发生内存溢出。利用SXSSFWork对象处理大数据量Excel报表导出。实例化SXSSFWork对象,指定在内存中所产生的POI导出相关对象的数量,一旦内存中的对象的个数达到这个指定值时,就将内存中的这些对象的内容写入到磁盘中,将对象从内存中销毁,以后只要达到这个值,就会以类似的处理方式处理,直至导出完成。
3.海量数据报表的读取,要设置POI的事件模式,根据Excel获取文件流,根据文件流创建OPCPackage,创建XSSFReader。进行SAX解析,自定义Sheet处理器,创建SAX的XmlReader对象,设置Sheet的事件处理器,逐行读取。
4.利用Jvisualv进行性能对比测试,用户模式下读取测试Excel文件直接内存溢出,测试Excel文件映射到内存中还是占用了不少内存;而事件模式下可以流畅的运行。
三、预期达到的成果
1.实现POI结构中的XSSF,提供读写Microsoft Excel OOXML XLSX格式文档的功能。完成POI报表导入和导出功能。完成批量导入功能,页面端上传Excel表格,服务端解析表格获取数据,批量新增用户,并进行POI报表导出。
2.实现POI提供的SXSSFWork对象,处理大数据量Excel报表的导出。
3.采用事件模式的机制去处理加载并读取海量的Excel,逐行扫描文档,一边扫描一边解析,解决Excel数据量较大时,由于不同的运行环境可能会造成内存不足的异常。实现SAX逐行扫描文档,一边扫描一边解析。
4.使用JDK提供的Jvisualvm性能监控工具来监视程序的运行情况,包括CUP,垃圾回收,内存的分配和使用等情况,使程序的运行阶段变得可控。
四、存在的问题及拟采取的解决措施
一.存在的问题:
1.当XSSFWork导出Excel报表时,是将所有对象都创建出来放入内存中,所有的对象都加载完成后,在以流的方式进行加载。当数据量很大时下载出来随着表格的不断创建,会导致内存不够用,也就是说下载之前我们的对象一直在占有中,没有被释放,所以占用字节非常的大;
2.当XSSFWork导出海量Excel报表时,随着表格的不断创建,会发生内存溢出
二.解决措施:
1.针对第一个问题可以采用事件模式来解决,它是基于SAX方式解析XML,SAX全称Simple API for XML,它是一个接口,也是一个软件包。它是一种XML解析的替代方法,不同于DOM解析XML文档时把所有内容一次性加载到内存中的方式,它逐行扫描文档,一边扫描,一边解析。
2.第二个问题可以利用SXSSFWork对象处理大数据量Excel报表导出。实例化SXSSFWork对象,指定在内存中所产生的POI导出相关对象的数量,一旦内存中的对象的个数达到这个指定值时,就将内存中的这些对象的内容写入到磁盘中,将对象从内存中销毁,以后只要达到这个值,就会以类似的处理方式处理,直至导出完成。
五、进度安排
第1周,课题调研、确定选题。
第2周,课题调研、确定选题。
第3周,课题调研、确定选题。
第4周,熟悉开发环境所需的知识,搭建开发环境。
第5周,实现POI加载Excel功能,创建workbook工作簿。
第6周,创建表单Sheet,创建单元格样式对象CellStyle。
第7周,实例化SXSSFWork对象,指定在内存中产生的POI导出对象的数量。
第8周,设置POI的事件模式。
第9周,根据文件流创建OPCPackage。
第10周,创建XSSFReader对象。
第11周,进行SAX解析,自定义Sheet处理器。
第12周,创建SAX的XmlReader对象。
第13周,创设置Sheet的事件处理器逐行读取。
第14周,利用Jvisualv进行性能对比测试。
第15周,总结优化。
第16周,答辩。
六、参考文献和书目
[1]毛燠锋.基于报表和模板的报告生成方法研究[J].软件工程. 2021,24(05)
[2]张庆林.电子表格公式的逆向工程[D].广州:中山大学,2014.
[3]林杰.基于Web的教学科研信息系统的设计与实现[D].上海:复旦大学,2012.
[4]马杰.基于POI的Android阅读器设计与实现[J].电子技术与软件工程. 2013,(15)
[5]林雪南.基于Apache POI解析Excel文件及内存使用分析[J].电脑编程技巧与维护. 2016,(23) .
[6]丁俊.大数据时代下的动态可配置数据采集系统的研究与设计[J].计算机应用与软件. 2018,35(03)
[7]王晓东.Apache POI组件批量操作Excel文件的应用探索[J].金融科技时代 . 2019,(06).
[8]王峰.基于Apache Ftpserver的可自定义文件系统的文件服务器[J].软件 . 2020,(07).
[9]朱文君,黄国权.基于Java反射机制的POI实现Excel数据导入/导出[J].计算机时代.2015,(22).
[10] Microsoft Corp.Microsoft and Sourcesense Partner to Contribute to Open Source,
Apache POI to Support Ecma Office Open XML File Formats [J]. Computers, Networks & Communications,2008.
|