Apache的Jakata项目的POI子项目,目标是处理ole2对象。 POI可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 下载。 编译好的jar主要有这样4个:poi包,poi Browser包,poi hdf包,poi hssf例程包。实际运行时,需要有poi包就可以了。

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 错误信息表

下面是一个简单的例子:

ExpandedBlockStart.gif /**
InBlock.gif * 
ExpandedBlockEnd.gif 
*/

None.gif
package  com.justinmobile.payease.admin.commons.excel;
None.gif
None.gif
import
 java.io.FileNotFoundException;
None.gif
import
 java.io.FileOutputStream;
None.gif
import
 java.io.IOException;
None.gif
import
 java.util.Calendar;
None.gif
None.gif
import
 org.apache.poi.hssf.usermodel.HSSFCell;
None.gif
import
 org.apache.poi.hssf.usermodel.HSSFCellStyle;
None.gif
import
 org.apache.poi.hssf.usermodel.HSSFDataFormat;
None.gif
import
 org.apache.poi.hssf.usermodel.HSSFRow;
None.gif
import
 org.apache.poi.hssf.usermodel.HSSFSheet;
None.gif
import
 org.apache.poi.hssf.usermodel.HSSFWorkbook;
None.gif
ExpandedBlockStart.gif
/**
InBlock.gif * 生成导出Excel文件对象
InBlock.gif * 
InBlock.gif * 
@author  John.Zhu
InBlock.gif * 
ExpandedBlockEnd.gif 
*/

ExpandedBlockStart.gif
public   class  XLSExport  {
InBlock.gif
InBlock.gif    
//  设置cell编码解决中文高位字节截断

InBlock.gif
     private   static   short  XLS_ENCODING  =  HSSFWorkbook.ENCODING_UTF_16;
InBlock.gif
InBlock.gif    
//  定制日期格式

InBlock.gif
     private   static  String DATE_FORMAT  =   " m/d/yy " //  "m/d/yy h:mm"
InBlock.gif
InBlock.gif    
//  定制浮点数格式

InBlock.gif
     private   static  String NUMBER_FORMAT  =   " #,##0.00 " ;
InBlock.gif
InBlock.gif    
private
 String xlsFileName;
InBlock.gif
InBlock.gif    
private
 HSSFWorkbook workbook;
InBlock.gif
InBlock.gif    
private
 HSSFSheet sheet;
InBlock.gif
InBlock.gif    
private
 HSSFRow row;
InBlock.gif
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * 初始化Excel
InBlock.gif     * 
InBlock.gif     * 
@param  fileName
InBlock.gif     *            导出文件名
ExpandedSubBlockEnd.gif     
*/

ExpandedSubBlockStart.gif    
public  XLSExport(String fileName)  {
InBlock.gif        
this .xlsFileName  =
 fileName;
InBlock.gif        
this .workbook  =   new
 HSSFWorkbook();
InBlock.gif        
this .sheet  =
 workbook.createSheet();
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * 导出Excel文件
InBlock.gif     * 
InBlock.gif     * 
@throws  XLSException
ExpandedSubBlockEnd.gif     
*/

ExpandedSubBlockStart.gif    
public   void  exportXLS()  throws  XLSException  {
ExpandedSubBlockStart.gif        
try  
{
InBlock.gif            FileOutputStream fOut 
=   new
 FileOutputStream(xlsFileName);
InBlock.gif            workbook.write(fOut);
InBlock.gif            fOut.flush();
InBlock.gif            fOut.close();
ExpandedSubBlockStart.gif        }
  catch  (FileNotFoundException e)  {
InBlock.gif            
throw   new  XLSException( " 生成导出Excel文件出错! "
, e);
ExpandedSubBlockStart.gif        }
  catch  (IOException e)  {
InBlock.gif            
throw   new  XLSException( " 写入Excel文件出错! "
, e);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * 增加一行
InBlock.gif     * 
InBlock.gif     * 
@param  index
InBlock.gif     *            行号
ExpandedSubBlockEnd.gif     
*/

ExpandedSubBlockStart.gif    
public   void  createRow( int  index)  {
InBlock.gif        
this .row  =   this
.sheet.createRow(index);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * 设置单元格
InBlock.gif     * 
InBlock.gif     * 
@param  index
InBlock.gif     *            列号
InBlock.gif     * 
@param
 value
InBlock.gif     *            单元格填充值
ExpandedSubBlockEnd.gif     
*/

ExpandedSubBlockStart.gif    
public   void  setCell( int  index, String value)  {
InBlock.gif        HSSFCell cell 
=   this .row.createCell(( short
) index);
InBlock.gif        cell.setCellType(HSSFCell.CELL_TYPE_STRING);
InBlock.gif        cell.setEncoding(XLS_ENCODING);
InBlock.gif        cell.setCellValue(value);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * 设置单元格
InBlock.gif     * 
InBlock.gif     * 
@param  index
InBlock.gif     *            列号
InBlock.gif     * 
@param
 value
InBlock.gif     *            单元格填充值
ExpandedSubBlockEnd.gif     
*/

ExpandedSubBlockStart.gif    
public   void  setCell( int  index, Calendar value)  {
InBlock.gif        HSSFCell cell 
=   this .row.createCell(( short
) index);
InBlock.gif        cell.setEncoding(XLS_ENCODING);
InBlock.gif        cell.setCellValue(value.getTime());
InBlock.gif        HSSFCellStyle cellStyle 
=  workbook.createCellStyle();  //  建立新的cell样式

InBlock.gif
        cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(DATE_FORMAT));  //  设置cell样式为定制的日期格式
InBlock.gif
        cell.setCellStyle(cellStyle);  //  设置该cell日期的显示格式
ExpandedSubBlockEnd.gif
    }

InBlock.gif
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * 设置单元格
InBlock.gif     * 
InBlock.gif     * 
@param  index
InBlock.gif     *            列号
InBlock.gif     * 
@param
 value
InBlock.gif     *            单元格填充值
ExpandedSubBlockEnd.gif     
*/

ExpandedSubBlockStart.gif    
public   void  setCell( int  index,  int  value)  {
InBlock.gif        HSSFCell cell 
=   this .row.createCell(( short
) index);
InBlock.gif        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
InBlock.gif        cell.setCellValue(value);
ExpandedSubBlockEnd.gif    }

InBlock.gif
ExpandedSubBlockStart.gif    
/**
InBlock.gif     * 设置单元格
InBlock.gif     * 
InBlock.gif     * 
@param  index
InBlock.gif     *            列号
InBlock.gif     * 
@param
 value
InBlock.gif     *            单元格填充值
ExpandedSubBlockEnd.gif     
*/

ExpandedSubBlockStart.gif    
public   void  setCell( int  index,  double  value)  {
InBlock.gif        HSSFCell cell 
=   this .row.createCell(( short
) index);
InBlock.gif        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
InBlock.gif        cell.setCellValue(value);
InBlock.gif        HSSFCellStyle cellStyle 
=  workbook.createCellStyle();  //  建立新的cell样式

InBlock.gif
        HSSFDataFormat format  =  workbook.createDataFormat();
InBlock.gif        cellStyle.setDataFormat(format.getFormat(NUMBER_FORMAT)); 
//  设置cell样式为定制的浮点数格式

InBlock.gif
        cell.setCellStyle(cellStyle);  //  设置该cell浮点数的显示格式
ExpandedSubBlockEnd.gif
    }

InBlock.gif
ExpandedBlockEnd.gif}

调用的过程:
ExpandedBlockStart.gifContractedBlock.gif/** */ /**
InBlock.gif * 
ExpandedBlockEnd.gif 
*/

None.gif
package  com.justinmobile.payease.admin.commons.excel;
None.gif
None.gif
import
 java.util.Calendar;
None.gif
ExpandedBlockStart.gif
/**
InBlock.gif * 导出Excel示例
InBlock.gif * 
InBlock.gif * 
@author  John.Zhu
InBlock.gif * 
ExpandedBlockEnd.gif 
*/

ExpandedBlockStart.gif
public   class  XLSDemo  {
InBlock.gif
ExpandedSubBlockStart.gif    
public   static   void  main(String[] args) 
{
InBlock.gif        System.out.println(
" 开始导出Excel文件 "
);
InBlock.gif        XLSExport e 
=   new  XLSExport( " d:/test.xls "
);
InBlock.gif        e.createRow(
0
);
InBlock.gif        e.setCell(
0 " 编号 "
);
InBlock.gif        e.setCell(
1 " 名称 "
);
InBlock.gif        e.setCell(
2 " 日期 "
);
InBlock.gif        e.setCell(
3 " 金额 "
);
InBlock.gif        e.createRow(
1
);
InBlock.gif        e.setCell(
0 1
);
InBlock.gif        e.setCell(
1 " 工商银行 "
);
InBlock.gif        e.setCell(
2
, Calendar.getInstance());
InBlock.gif        e.setCell(
3 111123.99
);
InBlock.gif        e.createRow(
2
);
InBlock.gif        e.setCell(
0 2
);
InBlock.gif        e.setCell(
1 " 招商银行 "
);
InBlock.gif        e.setCell(
2
, Calendar.getInstance());
InBlock.gif        e.setCell(
3 222456.88
);
ExpandedSubBlockStart.gif        
try  
{
InBlock.gif            e.exportXLS();
InBlock.gif            System.out.println(
" 导出Excel文件[成功] "
);
ExpandedSubBlockStart.gif        }
  catch  (XLSException e1)  {
InBlock.gif            System.out.println(
" 导出Excel文件[失败] "
);
InBlock.gif            e1.printStackTrace();
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

参考文档: http://jakarta.apache.org/poi/hssf/quick-guide.html

====================================================================================
使用POI在EXCEL文件中插入图片的方法!
public void test4() throws Exception{
  POIFSFileSystem fs  = new POIFSFileSystem(new FileInputStream("D://xxx.xls"));  //打开一个Excel文件
  HSSFWorkbook wb = new HSSFWorkbook(fs);
  HSSFSheet sheet = wb.getSheetAt(0);
     HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
     ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
     BufferedImage bufferImg = ImageIO.read(new File("d://pic02.jpg"));  //打开一个图片文件
     ImageIO.write(bufferImg,"jpg",byteArrayOut);
     //HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,0,0,(short) 19,35,(short)(19+3),35+4);
     HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,0,0,(short) 19,35,(short)(19+3),35+4); // 设置图片的位置.开始位置19,35  占用格子3,4
     patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
     FileOutputStream fileOut = new FileOutputStream("D://xxx4.xls");    // 输出文件.
        wb.write(fileOut);  
        fileOut.close();
 }
经过测试,只能占用整个单元格! 郁闷中...........

第一篇文章转载自:http://www.blogjava.net/zJun/archive/2007/01/22/95385.html  有些原文回复值得看看
第二篇文章转载自:http://www.blogjava.net/gohands/archive/2008/02/02/poi.html  也有些原文回复值得看看
在此谨向两篇文章的原作者致敬