2008-04-30

POI使用小结

本文主要是针对本人在实际项目中,利用POI来开发数据导入和导出的应用而总结而来。其实JAVA在处理Window OLE 2复合文档格式操作的API,还有很多POI、JExcelApi、IText等,而在实际的个人感觉POI确实是一个不错的选择。下面就POI开发的相关内容进行简要的介绍下,包括POI组成、开发步骤、具体示例、知识点汇总等内容进行讲解。POI组成
POI组成
 官方网站: http://jakarta.apache.org/poi/,这个是POI的官方网站,用户可以先从这里下载。最新的版本3.0.2,下载解压后里面有三个jar包(poi-3.0.2-FINAL-20080204.jar/ poi-contrib-3.0.2-FINAL-20080204.jar/ poi-scratchpad-3.0.2-FINAL-20080204.jar),而在这里包中主要含:
org.apache.poi.hssf.eventmodel 处理在读取和写入Excel文档中生成的各种动作.
org.apache.poi.hssf.eventusermodel 提供读取Excel文档的各个类.
org.apache.poi.hssf.record.formula 包含公式处理类, 这些类使用在Excel文档中.
org.apache.poi.hssf.usermodel 包含生成Excel文档的各个类.
org.apache.poi.hssf.util 提供处理Excel文档各个属性的工具类.
开发步骤
1:先下载POI包;
2:解压后将里面的3个jar文件拷贝至WEB-INF\lib中。
3:刷新工程后,即可以使用jar包中的内容了。

 读取POI文档
一:以文件名创建一个InputStream
二:以上面的InputStream实例创建一个HSSFWorkbook.
三:HSSFWorkbook的getSheetAt(index)可获取相应的工作页
四:工作页调用方法获取行
五:行再获取相应的格,调用单元格的方法,然后取出对应数据。

 创建Excel文件
一:以new HSSFWorkbook()构造一个新的Excel文档
二:以HSSFWorkbook的createSheet("工作本名"),创建一个新的工作页。
三:新的工作页以createRow(RowIndex)依次创建行
四:HSSFRow以createCell(CellIndex)依次创建单元格
五:设置相应单元格的格式,值。
具体示例
示例一:读取Excel文件中的所有数据,包括对个工作表(薄)。
public static void ReadExcel2(String file) {
int total = 0;
try {
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));
int sn = wb.getNumberOfSheets();
for(int i=0;i<sn;i++){
HSSFSheet sheet = wb.getSheetAt(i);
for(int j=0;j<sheet.getLastRowNum();j++){
HSSFRow row = sheet.getRow(j);
for(int k=0;k<row.getLastCellNum();k++){
HSSFCell cell = row.getCell((short)k);
if(cell.getCellType()==HSSFCell.CELL_TYPE_STRING){
System.out.println(cell.getStringCellValue());
}
else{
System.out.println(cell.getBooleanCellValue());
}
total++;
}
}
}
System.out.println(total);

} catch (Exception e) {
System.out.println(e.getStackTrace());
}
}

示例一:创建一个Excel,并把相应的数据添入到指定的单元格。
public static boolean createExcel(String file){
boolean flag = false;
try{
// wb,对应一个内存中的excel文档
HSSFWorkbook wb = new HSSFWorkbook();
// sheet创建一个工作页
for(int h =0;h<3;h++){
HSSFSheet sheet = wb.createSheet("jzh"+h);

//设置列的宽度
sheet.setDefaultColumnWidth((short)20);
//String[] s = new String[]{"姓名","年龄","地址","城市","公司","工作","职位","收入"};
String[] s = {"姓名","年龄","地址","城市","公司","工作","职位","收入"};
cellStyle = getAnyCellStyle(wb,getHdrFont(wb,12),HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_CENTER, (short)-1, true);
for(int x=0;x<s.length;x++){
HSSFRow row = sheet.createRow(0);

//设置行的高度
row.setHeight((short)500);
HSSFCell cell = row.createCell((short)x);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(s[x]);
cell.setCellStyle(cellStyle);
}


for (short i = 1; i < 100; i++)
{
// HSSFRow,对应一行
HSSFRow row = sheet.createRow(i);

//设置行的高度
row.setHeight((short)500);

for (short j = 0; j < 8; j++)
{
// HSSFCell对应一格
HSSFCell cell = row.createCell(j);
cell.setEncoding(HSSFCell.ENCODING_COMPRESSED_UNICODE);
//cell.setCellValue("Java,我的信仰" + String.valueOf(i));
cell.setCellValue(true);
}
}
OutputStream out = new FileOutputStream(file);
wb.write(out);
out.close();

flag = true;
}
}
catch(Exception ex){
flag = false;
}
return flag;
}
知识点汇总
 设置单元格格式
1. 创建字体,设置其为红色、粗体:
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
2、创建格式
HSSFCellStyle cellStyle= workbook.createCellStyle();
cellStyle.setFont(font);
3、应用格式
HSSFCell cell = row.createCell((short) 0);
cell.setCellStyle(cellStyle);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("标题"); 

 获得这个工作表数据行数
System.out.println(sheet.getLastRowNum());
 获得列数
System.out.println(row.getLastCellNum());

 设置第三列的宽度为5
sheet.setColumnWidth((short)3,(short)5);

 设置字体格式
HSSFCellStyle titlestyle = workbook.createCellStyle();
HSSFFont titlefont = workbook.createFont();
titlefont.setFontHeightInPoints((short)18);
titlefont.setFontName("黑体");
titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
titlestyle.setFont(titlefont);

titlestyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
titlestyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

HSSFCell titlecell = titlerow.createCell((short)((fileds.length) / 3));
titlecell.setCellStyle(titlestyle);
titlecell.setEncoding(HSSFCell.ENCODING_UTF_16);
titlecell.setCellValue(titles);

 合并单元格
主要是从(1,3)到(5,6)的合并点
sheet.addMergedRegion(new Region((short)1,(short)3,(short)5,(short)6));
评论
jamesji 2008-05-02
I don't think you are on the right direction, have a look on Eclipse BIRT project. It support ppt, doc, pdf, xls, and html formats. And its plugin is very easy to use, and save you tons of time.
发表评论

您还没有登录,请登录后发表评论

jzhua2006
搜索本博客
我的相册
2e5ec87e-16b5-39e8-ab44-a3890be11433-thumb
老婆2
共 7 张
最近加入圈子
存档
最新评论