摘要:许多机构都使用微软Excel表格作为信息交换的方式,众多的非专业编程人员、商业分析师和项目经理都能熟练的运用该技术。而使用Java从Excel文档中分析、搜集、巩固数据的能力则证明是很有用途的。JakartaPOI(PoorObfuscationImplementation,无困惑实现)使得程序员能够迅速完成这些任务。POI可以用来完成在纯Java中处理基于微软OLE(对象链接和嵌入)技术的文件格式到复合文档格式(如MicrosoftExcel,MicrosoftWord等软件使用的格式)的交换。本文对POI进行了剖析并说明了如何使用Java读写MicrosoftExcel文档,还提供了一个使用POI的实例。
关键词:报表;Java;Excel;POI
1引言
微软在系统桌面上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel。时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发。然而在要求更高的服务器领域,微软本身的产品移植性不好,性能不佳。在我们实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为最多人使用的浏览器,因为大家都用Windows。在企业办公系统中,常常有客户这样的要求:你要把我们的报表直接用Excel打开。或者是:我们已经习惯用Excel打印。这就看程序员能否为用户提供一个便利的编辑打印Excel报表的功能。对此如果用.net开发是没有问题的,但是有J2ee这个比.net更有前途的开放式的开发环境,难道我为了解决打印的要求去另写客户端的控件?或者在服务器端使用本地代码?前者的问题是关键数据的处理有时候不能在客户端做,后者的问题是牺牲了代码的可移植性和稳定性。如果让客户端只负责处理生成好的报表,那将是一种良好的选择。这就面临着新的挑战——即利用Excel的强大功能对报表进行再编辑润色。
2Java及其主要特点
Java是大家所熟悉的,它起源于80年代的中末期,仿效C和C++那样设计出一种更简单、更有效、更容易使用的跨多种计算机平台(硬件、操作系统等),可移植的通用语言。其特点主要有以下几个方面:(1)通用性:指的是跨平台、跨网络、跨语种和跨时间。(2)可移植性:Java的源代码是可移植的,而且对现有的几乎所有操作系统无须修改便能运行。(3)支持分布式环境。(4)Java虚拟机(JVM):这是一种软CPU,是Java环境最重要的组件,它是仿照一种小巧高效的CPU设计的,Java的编译器就是把Java的源代码编译成VM可执行的伪目标代码,而伪目标代码转换成实际的硬件调用。(5)Java本身就是一种虚拟操作系统和图形用户界面(GUI),它们也是可移植的。
3Java与Excel
使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet中创建一个CSV(commaseparatedvalues)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件。这样只是说可以访问到Excel文件,但是还不能真正的操纵Excel文件。在这里我们主要提到有两种开源项目即:JavaExcel和POI,使用它们大家就可以方便地操纵Excel文件。JavaExcel这个开放源项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API,非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。另一种为了实现纯Java的Excel解决方案是ApacheJakara推出了一个免费的开源项目POI。POI目前已比较成熟,可以处理MSExcel(97-2002)对象。国内已经有部分公司在他们的办公自动化等Web项目中使用POI了。
4POI包在WEB开发中的应用
如果要开发Eclipse插件式的信息应用系统,就肯定会涉及报表输出。在开发中我们将报表输出成Excel,这样用户就可以利用Excel的强大的功能对报表再编辑润色。
在Eclipse中,要和MSOffice交互需要用一个第三方库:即POI。它可以用于任何Java程序中(包括Web程序),而不仅仅是Eclipse。POI不是Eclipse的插件,而是几个JAR包,其知识与插件无关。
4.1安装与初始配置
POI可以到网站:http://jakarta.apache.org/下载,经两次解压后将其复制Eclipse的myplugin2项目的根目录下,紧接着要在Eclipse中设置对POI-2.5.1-final-20040804.jar的库引用。需要注意的是:如果在插件项目中演示了第三方包,还必须在plugin.xml文件的<runtime>项中加入对此包的引用:代码如下:
<runtime>
......
<libraryname="libPOI-2.5.1-final-20040804.jar"/>
</runtime>
如果系统中有几种JRE,那么必须确保正确设置PATH环境变量,以调用1.4.2或更新版本的JRE,而非老版本的JRE。环境设置基本上就是两个环境变量的设置:PATH和CLASSPATH。首先要正确设置CLASSPATH,以利用提供数据库访问和Excel电子表格功能的API。使用run.bat文件设置这一变量,这样就可以访问相应的Java文档(.jar文件)。
4.2创建一个空白的Excel文件
因为POI是通用于Java程序的API库,所以使用它并不需要在SWT/JFace或插件环境下,我们创建一个最普通的Java应用程序即可。程序代码如下:
//-----文件名:ExcelSample.java-----
publicclassExcelSample1{
publicstaticVoidmain(String[]args)throwsIOException{
//创建一个excel文件
HSSFWorkbooksb=newHSSFWorkbook();
FileOutputStreamfileOut=newFileOutputStream("c:\workbook.xls");
wb.write(fileOut);
fileOut.close();
}
}
说明:
(1)FileOutStream创建和wb.write语句都需要用作异常处理,本例是选择在main方法抛出其异常。
(2)FileOutStream属于JDK的数据流对象,通过它来将一个名为workbook.xls文件创建在C盘目录下,运行该程序可看到C盘根目录下多了一个Excel文件。