<!-- FEED自动发现标记开始 --> <link title="RSS 2.0" type="application/rss+xml" href="http://feed.feedsky.com/softwave" rel="alternate"> <!-- FEED自动发现标记结束 -->
<!--Google 468*60横幅广告开始--><script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "image"; //2007-07-26: CSDN google_ad_channel = "6063905817"; google_color_border = "6699CC"; google_color_bg = "E6E6E6"; google_color_link = "FFFFFF"; google_color_text = "333333"; google_color_url = "AECCEB"; google_ui_features = "rc:6"; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><!--Google 468*60横幅广告结束-->
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
StringDATE_FORMAT
=
"
m/d/yy
"
;
//
"m/d/yyh:mm"
//
定制浮点数格式
private
static
StringNUMBER_FORMAT
=
"
#,##0.00
"
;
private
StringxlsFileName;
private
HSSFWorkbookworkbook;
private
HSSFSheetsheet;
private
HSSFRowrow;
/***/
/**
*初始化Excel
*
*
@param
fileName
*导出文件名
*/
public
XLSExport(StringfileName)
{
this
.xlsFileName
=
fileName;
this
.workbook
=
new
HSSFWorkbook();
this
.sheet
=
workbook.createSheet();
}
/***/
/**
*导出Excel文件
*
*
@throws
XLSException
*/
public
void
exportXLS()
throws
XLSException
{
try
{
FileOutputStreamfOut
=
new
FileOutputStream(xlsFileName);
workbook.write(fOut);
fOut.flush();
fOut.close();
}
catch
(FileNotFoundExceptione)
{
throw
new
XLSException(
"
生成导出Excel文件出错!
"
,e);
}
catch
(IOExceptione)
{
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,Stringvalue)
{
HSSFCellcell
=
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,Calendarvalue)
{
HSSFCellcell
=
this
.row.createCell((
short
)index);
cell.setEncoding(XLS_ENCODING);
cell.setCellValue(value.getTime());
HSSFCellStylecellStyle
=
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)
{
HSSFCellcell
=
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)
{
HSSFCellcell
=
this
.row.createCell((
short
)index);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(value);
HSSFCellStylecellStyle
=
workbook.createCellStyle();
//
建立新的cell样式
HSSFDataFormatformat
=
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文件
"
);
XLSExporte
=
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
(XLSExceptione1)
{
System.out.println(
"
导出Excel文件[失败]
"
);
e1.printStackTrace();
}
}
}
参考文档:
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 也有些原文回复值得看看
在此谨向两篇文章的原作者致敬
<!--新Google 468*60横幅广告开始--><script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 468x60, 创建于 08-8-6 */ google_ad_slot = "7368701459"; google_ad_width = 468; google_ad_height = 60; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><!--新Google 468*60横幅广告结束-->
<!--新Google 468x15 横链接单元开始--><script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 468x15 横链接单元 */ google_ad_slot = "5785741422"; google_ad_width = 468; google_ad_height = 15; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><!--新Google 468x15 横链接单元结束-->
<!-- Google Reader shared发布代码开始 --><script type="text/javascript" src="http://www.google.com/reader/ui/publisher.js"></script><script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&callback=GRC_p(%7Bc%3A%22green%22%2Ct%3A%22%5Cu8FD9%5Cu4E9B%5Cu6587%5Cu7AE0%5Cu4E5F%5Cu503C%5Cu5F97%5Cu4E00%5Cu770B%22%2Cs%3A%22false%22%7D)%3Bnew%20GRC"></script><!-- Google Reader shared发布代码结束 -->