纯 java 的 Excel 解决方案(JakataPoiHSSF)
JCoder 转贴 (参与分:5623,专家分:415) 发表:2005-07-15 15:57 版本:1.0 阅读:501 次
微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel。时至
今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发。然而在要求更高的服务器
领域,微软本身的产品移植性不好,
性能不佳。在我们实际的开发中,表现层的解决方案虽然有多样,但是 Ie 浏览器已成为最多
人使用的浏览器,因为大家都用 Windows。在企业办公系统中,常常有客户这样子要求:你
要把我们的报表直接用 Excel 打开。或者是:我们已经习惯用 Excel 打印。这样子如果用.net
开发是没有问题的,但是有 j2ee 这个比.net 更有前途的开放式的开发环境,难道我为了解决
打印的要求去另写客户端的控件?或者在服务器端使用本地代码?第一种方案的问题是关键
数据的处理有时候不能在客户端做,第 2 种方案的问题是牺牲了代码的可移植性和稳定性。
如果让客户端只负责处理生成好的报表,那将是一种诱人的选择。
Apache 的 Jakata 项目的 POI 子项目,目标是处理 ole2 对象。目前比较成熟的是 HSSF 接
口,处理 MSExcel(97-2002)对象。它不象我们仅仅是用 csv 生成的没有格式的可以由
Excel 转换的东西,而是真正的 Excel 对象,你可以控制一些属性如 sheet,cell 等等。这是一
个年轻的项目,所以象 HDF 这样直接支持 Word 对象的好东西仍然在设计中。其它支持
word 格式的纯 java 方案还有 itext,不过也是仍在奋斗中。但是 HSSF 已经成熟到能够和足
够我们使用了。另外,无锡永中 Office 的实现方案也是纯 java 的解决方案,不过那也是完全
商业的产品,并不是公开代码项目。其实,从开发历史的角度讲,在 80 年代中
期 starOffice 的原作者在德国成立了 StarOfficesuite 公司,然后到 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 的处理上很烦恼。还好在 POIHSSF 中考虑到这个问题,可以设置 encoding 为双字
节。
POI 可以到 www.apache.org 下载到。编译好的 jar 主要有这样 4 个:poi 包,poiBrowser
包,poihdf 包,poihssf 例程包。实际运行时,需要有 poi 包就可以了。如果用 Jakartaant 编译
和运行,下载 apacheJakartaPOI 的 release 中的 src 包,它里面已经为你生成好了 build 文
件了。只要运行 ant 就可以了(ant的安装和使用在此不说了)。如果是用 Jbuilder运行,请在
新建的项目中加入 poi 包。以 Jbuilder6 为例,选择 Tools 菜单项的 configlibraries...选项,新
建一个 lib。在弹出的菜单中选择 poi 包,如这个 jakarta-poi-1.5.1-final-20020820.jar,把 poi