java 的 POI 操作 Excel 文件( 1)
微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如: Word, Excel。时至
今日, 它的源代码仍然不公开已封锁了我们的进一步应用和开发。 然而在要求更高的服务器
领域,微软本身的产品移植性不好,
性能不佳。在我们实际的开发中,表现层的解决方案虽然有多样,但是 Ie 浏览器已成为最
多人使用的浏览器,因为大家都用 Windows。在企业办公系统中,常常有客户这样子要求:
你要把我们的报表直接用 Excel 打开。或者是:我们已经习惯用 Excel 打印。这样子如果用 .net
开发是没有问题的, 但是有 j2ee 这个比 .net 更有前途的开放式的开发环境, 难道我为了解决
打印的要求去另写客户端的控件?或者在服务器端使用本地代码?第一种方案的问题是关
键数据的处理有时候不能在客户端做,第 2 种方案的问题是牺牲了代码的可移植性和稳定
性。如果让客户端只负责处理生成好的报表,那将是一种诱人的选择。
Apache 的 Jakata 项目的 POI 子项目, 目标是处理 ole2 对象。目前比较成熟的是 HSSF 接口,
处理 MS Excel(97-2002)对象。它不象我们仅仅是用 csv 生成的没有格式的可以由 Excel
转换的东西, 而是真正的 Excel 对象, 你可以控制一些属性如 sheet,cell 等等。 这是一个年轻
的项目,所以象 HDF 这样直接支持 Word 对象的好东西仍然在设计中。其它支持 word 格式
的纯 java 方案还有 itext,不过也是仍在奋斗中。但是 HSSF 已经成熟到能够和足够我们使
用了。另外,无锡永中 Office 的实现方案也是纯 java 的解决方案,不过那也是完全商业的
产品,并不是公开代码项目。其实,从开发历史的角度讲,在 80 年代中期 starOffice 的原作
者在德国成立了 StarOffice suite 公司, 然后到 1999 年夏天 starOffice 被 sun 收购,再到 2000
年 6 月 starOffice5.2 的发布;并且从 starOffice6.0 开始, starOffice 建立在 OpenOffice 的 api
的基础上,这个公开代码的 office 项目已经进行了很长的时间。虽然那是由 C++写的,但是
POI 的代码部分也是由 openOffice 改过来的。 所以, 应该对 POI 充满足够的信心。 国内已经
有部分公司在他们的办公自动化等 Web项目中使用 poi 了,如日恒的 ioffice ,海泰的 HTOffice
等。
java 当初把核心处理设成 Unicode,带来的好处是另代码适应了多语言环境。然而由于老外
的英语只有 26 个字母,有些情况下,一些程序员用 8 位的 byte 处理,一不小心就去掉了
CJK 的高位。或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多 java 应用在
CJK 的处理上很烦恼。还好在 POI HSSF 中考虑到这个问题,可以设置 encoding 为双字节。
POI 可以到 www.apache.org 下载到。 编译好的 jar 主要有这样 4 个:poi 包 ,poi Browser 包,poi
hdf 包,poi hssf 例程包。实际运行时, 需要有 poi 包就可以了。 如果用 Jakarta ant 编译和运行,
下载 apache Jakarta POI的 release中的 src 包,它里面已经为你生成好了 build 文件了。只要
运行 ant 就可以了 (ant 的安装和使用在此不说了 )。如果是用 Jbuilder 运行,请在新建的项
目中加入 poi 包。以 Jbuilder6 为例,选择 Tools 菜单项的 config libraries... 选项,新建一个 lib。
在弹出的菜单中选择 poi 包,如这个 jakarta-poi-1.5.1-final-20020820.jar ,把 poi 添加到 jbuilder
中。然后,右键点击你的项目,在 project 的 properties 菜单中 path 的 required Libraries 中,
点 add,添加刚才加入到 jbuilder 中的 poi 到你现在的项目中。 如果你仅仅是为了熟悉 POI hssf
的使用,可以直接看 POI 的 samples 包中的源代码,并且运行它。 hssf 的各种对象都有例程
的介绍。 hssf 提供的例程在 org.apache.poi.hssf.usermodel.examples 包中, 共有 14 个,生成的
目标 xls 都是 workbook.xls 。如果你想看更多的例程, 可以参考 hssf 的 Junit test cases,在 poi
的包的源代码中有。 hssf 都有测试代码。
评论0
最新资源