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都有测试代码。
这里只对部分例程的实现做介绍。
HSSF提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括Excell对象,样式和格式,还有辅助操作。有以下几种对象:
HSSFWorkbook excell的文档对象
HSSFSheet excell的表单
HSSFRow excell的行
HSSFCell excell的格子单元
HSSFFont excell字体
HSSFName 名称
HSSFDataFormat 日期格式
在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 基本对象
从中不难可以发现每一个基本对象都关联了一个Record对象。Record对象是一个参考Office格式的相关记录。
图2 HSSFWorkbook
HSSFWorkbook即是一个Excell对象。这幅类图体现的是HSSFWorkbook和基本对象的相互关系。可见,许多对象中也建立了
Workbook的引用。还需要注意的是在HSSFWorkbook和HSSFSheet中建立了log机制POILogger,而且POILogger
也是使用apache Log4J实现的。
先看poi的examples包中提供的最简单的例子,建立一个空xls文件。
Java代码
import
org.apache.poi.hssf.usermodel.HSSFWorkbook;
import
java.io.FileOutputStream;
import
java.io.IOException;
public class
NewWorkbook
{
public static void
main(String[] args)
throws IOException
{
HSSFWorkbook wb = new
HSSFWorkbook();//建立新HSSFWorkbook对象
FileOutputStream fileOut = new
FileOutputStream("workbook.xls");
wb.write(fileOut);//把Workbook对象输出到文件workbook.xls中
fileOut.close();
}
}
通过这个例子,我们建立的是一个空白的xls文件(不是空文件)。在此基础上,我们可以进一步看其它的例子。
import
org.apache.poi.hssf.usermodel.*;
import
java.io.FileOutputStream;
import
java.io.IOException;
public class
CreateCells
{
public static void
main(String[] args)
throws IOException
{
HSSFWorkbook wb = 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);//