一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。 二.HSSF概况 HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。 HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。 三.开始编码 1 . 准备工作 要求:JDK 1.4+POI开发包 可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包 2 . EXCEL 结构 HSSFWorkbook excell 文档对象介绍 HSSFSheet excell的表单 HSSFRow excell的行 HSSFCell excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader sheet头 HSSFFooter sheet尾 和这个样式 HSSFCellStyle cell样式 辅助操作包括 HSSFDateUtil 日期 HSSFPrintSetup 打印 HSSFErrorConstants 错误信息表 4 . 可参考文档 POI 主页:http://jakarta.apache.org/poi/, 初学者如何快速上手使用POI HSSF http://jakarta.apache.org/poi/hssf/quick-guide.html 。 代码例子 http://blog.java-cn.com/user1/6749/archives/2005/18347.html 里面有很多例子代码,可以很方便上手。 四.使用心得 POI HSSF 的usermodel包把Excel文件映射成我们熟悉的结构,诸如Workbook、Sheet、Row、Cell等,它把整个结构以一组对象的形式保存在内存之中,便于理解,操作方便,基本上能够满足我们的要求,所以说这个一个不错的选择。 1.创建工作簿 (WORKBOOK)
//-------------------------------以上实例代码均来自官方网站 //-------------------------------POI中使用的颜色是用颜色索引来实现,如下: /* * 颜色对照表 数字代表颜色索引 8: BLACK 60: BROWN 59: OLIVE_GREEN 58: DARK_GREEN 56: DARK_TEAL 18: DARK_BLUE 32: DARK_BLUE 62: INDIGO 63: GREY_80_PERCENT 53: ORANGE 19: DARK_YELLOW 17: GREEN 21: TEAL 38: TEAL 12: BLUE 39: BLUE 54: BLUE_GREY 23: GREY_50_PERCENT 10: RED 52: LIGHT_ORANGE 50: LIME 57: SEA_GREEN 49: AQUA 48: LIGHT_BLUE 20: VIOLET 36: VIOLET 55: GREY_40_PERCENT 14: PINK 33: PINK 51: GOLD 13: YELLOW 34: YELLOW 11: BRIGHT_GREEN 35: BRIGHT_GREEN 15: TURQUOISE 35: TURQUOISE 16: DARK_RED 37: DARK_RED 40: SKY_BLUE 61: PLUM 25: PLUM 22: GREY_25_PERCENT 45: ROSE 43: LIGHT_YELLOW 42: LIGHT_GREEN 41: LIGHT_TURQUOISE 27:LIGHT_TURQUOISE 44: PALE_BLUE 46: LAVENDER 9: WHITE 24: CORNFLOWER_BLUE 26: LEMON_CHIFFON 25: MAROON 28: ORCHID 29: CORAL 30: ROYAL_BLUE 31: LIGHT_CORNFLOWER_BLUE */ //----------------------------------------------------你可以按上面的方法来自定义颜色 /* * 自定义颜色,去掉注释,贴加,其他则查看颜色对照表 HSSFPalette palette = this.getCustomPalette(); palette.setColorAtIndex(idx, i, //RGB red (0-255) j, //RGB green k //RGB blue ); */ //-------------------------------------------------
show code
import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class POI_ExcelDemo {
/**
* @param args
*/
public static void main(String[] args) {
/**
* author youjianbo
* date 2008-6-26
* 使用Apache POI生成Excel
* */
try
{
POI_ExcelDemo excelDemo = new POI_ExcelDemo();
String []values = {"a","b","c","d","e","f","j"};
//建立工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//建立Excel 页
HSSFSheet sheet = workbook.createSheet();
excelDemo.setColumnWidth(sheet);
//给sheet取名,并设置编码
workbook.setSheetName(0, "第一张sheet", HSSFWorkbook.ENCODING_UTF_16);
//建立Excel title
HSSFCellStyle style = excelDemo.createTitleStyle(workbook);
HSSFRow rowTitle = sheet.createRow(0);
for(int i=0;i<3;i++)
{
HSSFCell cellTitle = rowTitle.createCell((short)i);
cellTitle.setCellStyle(style);
cellTitle.setCellValue("The "+(i+1)+" Cell");
}
//建立Excel行,这里建立两行三列
for(int i=1;i<3;i++)
{
HSSFRow row = sheet.createRow(i);
for(int j=1;j<4;j++)
{
HSSFCell cell = row.createCell((short)(j-1));
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(style);
cell.setCellValue(values[i*j]);
}
}
//sheet.createFreezePane(3, 2);//分割工作区
//将生成的excel写入
String path = excelDemo.getClassPath();
System.out.println("获得的路径是:"+path);
FileOutputStream fileWrite = new FileOutputStream(path+"//"+"excelDemo.xls");
workbook.write(fileWrite);
fileWrite.flush();
fileWrite.close();
System.out.println("Excel 生成成功");
}catch(Exception e)
{
e.printStackTrace();
System.out.println(e.getMessage());
}
}
//获得工程目录路径
private String getClassPath()
{
return this.getClass().getClassLoader().getResource("").getPath();
}
//设置cell Style
private HSSFCellStyle createTitleStyle(HSSFWorkbook wb) {
HSSFFont boldFont = wb.createFont();
boldFont.setFontHeight((short) 200);
HSSFCellStyle style = wb.createCellStyle();
style.setFont(boldFont);
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("###,##0.00"));
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
return style;
}
//设置Cell 宽度
private void setColumnWidth(HSSFSheet sheet)
{
//根据你数据里面的记录有多少列,就设置多少列
sheet.setColumnWidth((short) 0, (short) 3000);
sheet.setColumnWidth((short) 1, (short) 3000);
sheet.setColumnWidth((short) 2, (short) 3000);
}
}