Dev@Free

zJun's Tech Weblog

使用POI生成Excel文件

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

下面是一个简单的例子:

/**
 * 
 
*/

package  com.justinmobile.payease.admin.commons.excel;

import
 java.io.FileNotFoundException;
import
 java.io.FileOutputStream;
import
 java.io.IOException;
import
 java.util.Calendar;

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.HSSFRow;
import
 org.apache.poi.hssf.usermodel.HSSFSheet;
import
 org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * 生成导出Excel文件对象
 * 
 * 
@author  John.Zhu
 * 
 
*/

public   class  XLSExport  {

    
//  设置cell编码解决中文高位字节截断

     private   static   short  XLS_ENCODING  =  HSSFWorkbook.ENCODING_UTF_16;

    
//  定制日期格式

     private   static  String DATE_FORMAT  =   " m/d/yy " //  "m/d/yy h:mm"

    
//  定制浮点数格式

     private   static  String NUMBER_FORMAT  =   " #,##0.00 " ;

    
private
 String xlsFileName;

    
private
 HSSFWorkbook workbook;

    
private
 HSSFSheet sheet;

    
private
 HSSFRow row;

    
/**
     * 初始化Excel
     * 
     * 
@param  fileName
     *            导出文件名
     
*/

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


    
/**
     * 导出Excel文件
     * 
     * 
@throws  XLSException
     
*/

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


    }


    
/**
     * 增加一行
     * 
     * 
@param  index
     *            行号
     
*/

    
public   void  createRow( int  index)  {
        
this .row  =   this
.sheet.createRow(index);
    }


    
/**
     * 设置单元格
     * 
     * 
@param  index
     *            列号
     * 
@param
 value
     *            单元格填充值
     
*/

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


    
/**
     * 设置单元格
     * 
     * 
@param  index
     *            列号
     * 
@param
 value
     *            单元格填充值
     
*/

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

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


    
/**
     * 设置单元格
     * 
     * 
@param  index
     *            列号
     * 
@param
 value
     *            单元格填充值
     
*/

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


    
/**
     * 设置单元格
     * 
     * 
@param  index
     *            列号
     * 
@param
 value
     *            单元格填充值
     
*/

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

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

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


}

调用的过程:
/**
 * 
 
*/

package  com.justinmobile.payease.admin.commons.excel;

import
 java.util.Calendar;

/**
 * 导出Excel示例
 * 
 * 
@author  John.Zhu
 * 
 
*/

public   class  XLSDemo  {

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

    }

}

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

posted on 2007-01-22 17:59 zJun's帛罗阁 阅读(22217) 评论(6)  编辑  收藏 所属分类: 开发环境

评论

# re: 使用POI生成Excel文件 2007-01-23 12:07 Welkin Hu

POI不能支持图片啊  回复  更多评论   

# re: 使用POI生成Excel文件 2007-01-23 23:30 小车马

恩,非常好,还是用开源的东东,呵呵,
楼主,潜力贴论坛(http://content.uu1001.com)是我个人的一个设想,如果你对java非常的专注,并且愿意交我这个朋友,可以发邮件给我(lbw070105@gmail.com),希望我们可以一起发展它。  回复  更多评论   

# re: 使用POI生成Excel文件 2007-01-25 09:45 dixson

个人觉得POI没有JXL好用.而且POI...很~~~~久没有更新了.开发者根本不重视POI的HSSF啊.  回复  更多评论   

# re: 使用POI生成Excel文件[未登录] 2007-03-12 11:51 魔力天使

这个资料比较好,谢谢提供.特此感谢  回复  更多评论   

# re: 使用POI生成Excel文件 2008-04-16 13:43 峨峨

好东西,顶!不过生成excel表格的时间有问题  回复  更多评论   

# re: 使用POI生成Excel文件 2009-12-10 19:17 zou-hong

为什么我用上面的代码运行,控制台显示成功,但是没有生成test.xls文件,这是为什么啊?我用的是Excel2003的版本是不是和这有关系啊?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

常用链接

留言簿(15)

随笔分类

随笔档案

相册

收藏夹

博客

文档

站点

论坛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜