java操作Excel(Jakarta_POI)

上传人:飞*** 文档编号:44520647 上传时间:2018-06-09 格式:DOC 页数:29 大小:90KB
返回 下载 相关 举报
java操作Excel(Jakarta_POI)_第1页
第1页 / 共29页
java操作Excel(Jakarta_POI)_第2页
第2页 / 共29页
java操作Excel(Jakarta_POI)_第3页
第3页 / 共29页
java操作Excel(Jakarta_POI)_第4页
第4页 / 共29页
java操作Excel(Jakarta_POI)_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《java操作Excel(Jakarta_POI)》由会员分享,可在线阅读,更多相关《java操作Excel(Jakarta_POI)(29页珍藏版)》请在金锄头文库上搜索。

1、java 操作操作 Excel(Jakarta_POI) 今天又用到了 excel 操作但由于相隔久远只好重新复习,顺便整理一下,之前整理了 JavaExcelAPI(简称 JXL)的,由于 POI 用的不是很多就把 4 篇整理到一个 blog 中!akata Poi HSSF:纯 java 的 Excel 解决方案2002-10-23 上午 08:52:34 微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel。时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发。然而在要求更高的服务器领域,微软本身的产品移植性不好, 性能不佳。在我们实际的开发中,表现

2、层的解决方案虽然有多样,但是 Ie 浏览器已成为最多人使用的浏览器,因为大家都用 Windows。在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用 Excel 打开。或者是:我们已经习惯用 Excel 打印。这样子如果用.net 开发是没有问题的,但是有 j2ee 这个比.net 更有前途的开放式的开发环境,难道我为了解决打印的要求去另写客户端的控件?或者在服务器端使用本地代码?第一种方案的问题是关键数据的处理有时候不能在客户端做,第 2 种方案的问题是牺牲了代码的可移植性和稳定性。如果让客户端只负责处理生成好的报表,那将是一种诱人的选择。Apache 的 Jakata 项目的

3、POI 子项目,目标是处理 ole2 对象。目前比较成熟的是 HSSF 接口,处理 MS Excel(97-2002)对象。它不象我们仅仅是用 csv 生成的没有格式的可以由 Excel 转换的东西,而是真正的 Excel 对象,你可以控制一些属性如 sheet,cell 等等。这是一个年轻的项目,所以象 HDF 这样直接支持 Word 对象的好东西仍然在设计中。其它支持 word格式的纯 java 方案还有 itext,不过也是仍在奋斗中。但是 HSSF 已经成熟到能够和足够我们使用了。另外,无锡永中 Office 的实现方案也是纯 java 的解决方案,不过那也是完全商业的产品,并不是公开

4、代码项目。其实,从开发历史的角度讲,在 80 年代中期 starOffice 的原作者在德国成立了 StarOffice suite 公司,然后到 1999 年夏天 starOffice 被 sun 收购,再到2000 年 6 月 starOffice5.2 的发布;并且从 starOffice6.0 开始,starOffice 建立在 OpenOffice 的 api 的基础上,这个公开代码的 office 项目已经进行了很长的时间。虽然那是由 C+写的,但是 POI 的代码部分也是由 openOffice 改过来的。所以,应该对 POI 充满足够的信心。国内已经有部分公司在他们的办公自动化

5、等 Web 项目中使用 poi 了,如日恒的 ioffice,海泰的 HTOffice 等。java 当初把核心处理设成 Unicode,带来的好处是另代码适应了多语言环境。然而由于老外的英语只有 26 个字母,有些情况下,一些程序员用 8 位的 byte 处理,一不小心就去掉了 CJK 的高位。或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多 java 应用在 CJK的处理上很烦恼。还好在 POI HSSF 中考虑到这个问题,可以设置 encoding 为双字节。POI 可以到 www.apache.org 下载到。编译好的 jar 主要有这样 4 个:poi 包,poi Brows

6、er包,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-20

7、020820.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。

8、如果你想看更多的例程,可以参考 hssf 的 Junit test cases,在 poi 的包的源代码中有。hssf 都有测试代码。这里只对部分例程的实现做介绍。HSSF 提供给用户使用的对象在 org.apache.poi.hssf.usermodel 包中,主要部分包括 Excell对象,样式和格式,还有辅助操作。有以下几种对象:HSSFWorkbook excell 的文档对象HSSFSheet excell 的表单HSSFRow excell 的行 HSSFCell excell 的格子单元HSSFFont excell 字体HSSFName 名称HSSFDataFormat 日期格

9、式在 poi1.7 中才有以下 2 项:HSSFHeader sheet 头HSSFFooter sheet 尾和这个样式HSSFCellStyle cell 样式辅助操作包括HSSFDateUtil 日期HSSFPrintSetup 打印 HSSFErrorConstants 错误信息表仔细看 org.apache.poi.hssf 包的结构,不难发现 HSSF 的内部实现遵循的是 MVC 模型。这里我用 Rose 把 org.apache.poi.hssf.usermodel 包中的对象反向导入并根据相互关系作了整理,详见下面两图:图 1 基本对象 从中不难可以发现每一个基本对象都关联了一

10、个 Record 对象。Record 对象是一个参考 Office 格式的相关记录。图 2 HSSFWorkbookHSSFWorkbook 即是一个 Excell 对象。这幅类图体现的是 HSSFWorkbook 和基本对象的相互关系。可见,许多对象中也建立了 Workbook 的引用。还需要注意的是在 HSSFWorkbook 和 HSSFSheet 中建立了 log 机制 POILogger,而且 POILogger 也是使用 apache Log4J 实现的。先看 poi 的 examples 包中提供的最简单的例子,建立一个空 xls 文件。import org.apache.poi

11、.hssf.usermodel.HSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;public class NewWorkbookpublic static void main(String args)throws IOExceptionHSSFWorkbook wb = new HSSFWorkbook();/建立新 HSSFWorkbook 对象FileOutputStream fileOut = new FileOutputStream(“workbook.xls“);wb.write(file

12、Out);/把 Workbook 对象输出到文件 workbook.xls 中fileOut.close();通过这个例子,我们建立的是一个空白的 xls 文件(不是空文件)。在此基础上,我们可以进一步看其它的例子。import org.apache.poi.hssf.usermodel.*;import java.io.FileOutputStream;import java.io.IOException;public class CreateCellspublic static void main(String args)throws IOExceptionHSSFWorkbook wb

13、= new HSSFWorkbook();/建立新 HSSFWorkbook 对象HSSFSheet sheet = wb.createSheet(“new sheet“);/建立新的 sheet 对象/ Create a row and put some cells in it. Rows are 0 based.HSSFRow row = sheet.createRow(short)0);/建立新行/ Create a cell and put a value in it.HSSFCell cell = row.createCell(short)0);/建立新 cellcell.setCe

14、llValue(1);/设置 cell 的整数类型的值/ Or do it on one line.row.createCell(short)1).setCellValue(1.2);/设置 cell 浮点类型的值row.createCell(short)2).setCellValue(“test“);/设置 cell 字符类型的值row.createCell(short)3).setCellValue(true);/设置 cell 布尔类型的值 HSSFCellStyle cellStyle = wb.createCellStyle();/建立新的 cell 样式cellStyle.setD

15、ataFormat(HSSFDataFormat.getFormat(“m/d/yy h:mm“);/设置 cell样式为定制的日期格式HSSFCell dCell =row.createCell(short)4);dCell.setCellValue(new Date();/设置 cell 为日期类型的值dCell.setCellStyle(cellStyle); /设置该 cell 日期的显示格式HSSFCell csCell =row.createCell(short)5);csCell.setEncoding(HSSFCell.ENCODING_UTF_16);/设置 cell 编码解

16、决中文高位字节截断csCell.setCellValue(“中文测试_Chinese Words Test“);/设置中西文结合字符串row.createCell(short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);/建立错误 cell/ Write the output to a fileFileOutputStream fileOut = new FileOutputStream(“workbook.xls“);wb.write(fileOut);fileOut.close();我稍微修改了原来的 examples 包中的 CreateCells 类写了上面的功能测试类。通过这个例子,我们可以清楚的看到 xls 文件从大到小包括了 HSSFWorkbook HSSFSheet HSSFRow HSSFCell 这样几个对象。我们可以在 cell 中设置各种类型的值。尤其要注意的是如果你想正确的显示非欧美的字符时,尤其象中日韩这样的语言,必须设置

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号