不良模糊化实现在企业管理软件中的应用
2011-10-26孙晶
孙晶
新疆石油勘察设计研究院信息中心 834000
不良模糊化实现在企业管理软件中的应用
孙晶
新疆石油勘察设计研究院信息中心 834000
在企业办公系统中,常常有用户需要将报表直接用Excel打开或者是习惯于通过Excel对报表进行打印。Apache的POI项目,目标是处理OLE2对象,目前比较成熟的是HSSF接口,处理MS Excel(97-2003)对象,以及新开发的XSSF接口,处理MS Excel(2007)对象。它不像我们仅仅是用CSV生成的没有格式的,仅由Excel转换而来的东西,而是真正的Excel对象,你可以控制一些属性如shell、cell等等。
第2代对象链接和嵌入技术 ;文件输入流;数据转移
OLE2(Object Linking and Embed;dfiinleg )I nput Stream ; data transfer
1 POI框架介绍
1.1 POI实现背景及其目的
市场上Microsoft Excel得到了广泛接受以用于简单的数据存储和操作。其允许非技术上的熟练用户在易于使用且功能强大的基于GUI的应用程序中输入以及操作数据。然而,偶尔也必须将Excel电子表格中所驻留的数据适配于其他用途,将其进行广泛分布、频繁更新,或由一个大型用户群来访问。而这些功能都是Excel设计中所没有提供的。另一方面,最好是能够利用Microsoft Excel中已开发的商务用户的知识和技能以及关系数据库存储模型固有的功能和分布式特性。通过利用Apache的POI和HSSF等来促进Excel与Oracle数据库之间的集成,我们将逐渐实现这些目标。
1.2 POI构成简述及其优点
P O I代表P o o r O b f u s c a t i o n Implementation,即不良模糊化实现,它的目标就是提供一组Java API来使得基于Microsoft OLE2Compound Document格式的Microsoft Office文件易于操作。一些POI API仅仅是为最常用的Microsoft Office文件Word和Excel而开发的;而其他的API则是用于通用的OLE 2Compound Document和属性文件。
POI子项目包括:POIFS、HSSF、HDF、HPSF
(1)满足需求:可创建使用HSSF的工具来自动化同步以及Excel紧密集成。
(2)维护:易受数据库模式更改的影响,但独立于Excel的功能。
(3)成本:取决于所需功能,在编程工作上可能需要投入大量的时间和金钱。
(4)利用:利用整个Java API和POI后续开发包
(5)自动化:Java API支持自动化。
1.3 POI处理过程概述
首先需要下载POI的包,可以到apache的官网上下载,目前最新发布的资源包是poi-3.7-beta3.jar、poi-ooxml-3.7-beta3. jar。POI对Excel的操作可概括为导入与导出,即读数据与写数据。
1.3.1 导入一个Excel文件
导入Excel时,可通过Java API中的正则表达式识别要导入的文件扩展名是“xls”还是“xlsx”,前者需要调用POI中的HSSF接口来读取文件,如果是后者则是用POI中的XSSF接口读取文件。
图1 读取Excel文件的流程
FileInputStream属于Java API的数据输入流对象。在通过HSSF或XSSF接口获取到工作簿Workbook对象,再通过工作簿Workbook获取第一个报表Sheet对象,再通过Sheet李的方法getPhysicalNumberOfRows ()得到报表总行数t o t a l R o w s和方法getPhysicalNumberOfCells()得到报表总列数。经过循环迭代后得到每个单元格Cell对象,进而得到单元格中的数据。
1.3.2 导出一个Excel文件
我们以创建一个2003版即扩展名是xls的excel文件为例,程序代码如下:
FileOutputStream属于Java API的数据输出流对象。通过它来将一个名为test.xls文件创建在C盘根目录下,运行该输出程序后可以看到C盘上的根目录上多了一个Excel文件。如果将程序中的FileOutputStream(“C: \test.xls”)的参数改为“test.xls”,则文件就会创建在该项目的根目录下。在往Excel单元格里写入信息时,依然遵从自定向下的关系,即:工作簿→(HSSFWorkbook)→表格(HSSFSheet)→表格行(HSSFRow)→单元格(HSSFCell)。将数据库中表的数据导入到Excel中,首先我们要先将数据库中的表的数据查询出来,这里通过Hibernate将数据库某个表中的数据查询出来,然后通过循环将表中的数据写入Excel中去。我们可以一个目前我院正在使用的管理系统为例。
2 POI框架在人员基础信息管理系统中的运用
2.1 人员基础信息管理系统介绍
随着电脑的普及与使用,现在的管理也提升了一个档次,渐渐实现了无纸化办公,即从原来的人工记录管理模式转变为电脑一体化管理。人力资源是社会生产的必要先决条件,充足的人力资源有利于生产的发展。我院近年来陆续招聘了大批青年人才,使得设计力量逐渐发展壮大,随着人数的增加,数据量的扩增,流动数据不能及时处理,信息查询效率低,信息不能及时反馈更新。为了加强对人才的管理,提高相关部门的业务管理和事务处理效率,建立完备可靠和开放的系统,我们开发了人员基础信息管理系统。
人员基础信息管理系统,是以企业对人力资源的管理方式为实例而设计的一种实用型管理系统。本系统的特点是通用性、简单操作性,适用于同行业以及一些同类型的企业管理。不但让人力资源部的管理人员从繁重的工作中解脱出来,而且由于是自主研发,降低了开发成本,满足了我院的需求。
2.2 数据批量转移在此系统中存在的必要性
软件从对新员工的加入后,便可对其信息进行永久维护。主要包括:基本信息(姓名、年龄、出生、科室、照片等)的新增与修改、员工科室调动、科室信息新增与修改、员工的在职和离岗等等。最关键的是当有其他系统需要大量调用员工信息时,通过批量导出功能可将员工信息以Excel表格的形式批量保存出来,有利于外部人员的统计工作。这一功能就由POI框架来实现。其效果如图2。
选择要导出的部门,再点击工具栏中的“导出”按钮。会出现提示保存的界面,默认保存为Excel(97-2003)格式。表格可以罗列出每个人的信息,包括:民族、部门、办公室电话、邮箱等。只需对这些数据稍作相关字段的调整,便可被其他管理软件所使用,提高了办事效率。
2.3 数据转移过程
我们选择Hibernate3.2作为对象/关系映射的解决方案,由它负责Java对象和关系数据之间的映射。通常通过poi.jar中的HibernateUtil.java设计数据库中的字段,并进行文件配置,在这里可根据要开发的系统实际需求自行编写一个ExportUtil.java,根据Excel的模板,将存放数据序列的变量data中的信息与模板中的模板变量进行融合,返回合并后Excel文件的输出流。在Excel的模板中,使用第一个sheet。模板变量所在行必须连续,当遇见空cell时,将不分析后面的cell。因为Excel的模板文件支持xls和xlsx两种文件格式。 输出的Excel以模板文件的格式为准。即模板是xls输出也是xls,模板是xlsx输出也会是xlsx。如果data为null或者size为0,则返回的excel中没有数据,即将模板变量对应的单元格置为空。
图4 数据库系统的组成
3 关键问题的解决方案
3.1 识别用户数据的模板变量
我们在WEB系统的页面上所看到的诸如“姓名”、“部门简称”、“职称”等字段名下的内容,实际是通过模板变量进行输出。根据数据传输协议变量必须为英文,因此变量名不能为中文,并且不同字段名的模板变量也不同,我们将变量定义为“{name}”、“{dept.name}”等,程序会通过识别“{}”内的名字来找到数据库中对应字段的内容,并将它取出。其程序如下:
3.2 验证Excel合法性
讨论了导出Excel要面临的问题后,再来看一下如果要导入Excel文件时需要注意的问题。因为poi开发包对2003版Excel和2007版Excel使用的是不同的子项目HSSF和XSSF,生成的工作簿对象也不相同,如果不判断出是哪个版本的Excel,就无法读取Excel中的内容。因此在读取文件输入流时需要先对文件输入流(FileInputStream)进行判断。判断程序如下:
得到了合法的输入流(fileInputStream)后,便可得到对应工作簿(Workbook)对象,根据1.3.1节介绍的读取文件流程,通过判断每个单元格(Cell)中内容的格式,正确的输出数据。常用的格式有:CELL_TYPE_NUMERIC( 数字型)、CELL_TYPE_FORMULA( 公式型)、CELL_TYPE_STRING( 字符串型)、CELL_TYPE_BOOLEAN( 布尔型),数字型时还应判断是否日期格式,否则输出内容有误。
4 结论
POI框架已应用于我院运行的主要WEB管理系统,包括设计流程管理系统、档案管理系统、人员基础信息管理系统,以及正在开发阶段的人工时考核系统,其适应性可见一斑,稳定性得到考验,并且相对其他开发包如JXL只能读取(97-2003)Excel文档的缺陷,POI框架还可读取2007版以上的Excel文档,可对单元格的具体属性进行编辑,具有广泛通用性。目前国外的POI框架创作小组还在不断更新其功能,扩展性很强,未来在各类管理系统中的应用前景必将是一片光明。
Poor Obfuscation Implementation base on the application in Enterprise Management Software
Sun Jing
Information Center, Department of Equipment, Xinjiang Petroleum Investigation Design and Research Institute, Xinjiang 834
In Enterprise Office System, the user often read report by Excel or used to print it by Excel. The POI project of Apache what purpose is deal with the object of OLE2has established technique what the interface of HSSF that deal with the object of Excel for 2003edition, and the interface of XSSF that deal with the object of Excel for 2007edition. It doesn’t like something converted by Excel and generated to formless by CSV for us, b’ust ait real object of Excel that you can control some attribute such as shell, cell and so on.
10.3969/j.issn.1001-8972.2011.11.112
图2 显示人员信息界面
图3 导出的指定科室人员名单
孙晶(1983-),男,新疆石油勘察设计研究院信息中心工作,现主要从事Java语言web开发。