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.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();
}
}
}
*
*/
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 也有些原文回复值得看看
在此谨向两篇文章的原作者致敬