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