- 浏览: 86143 次
- 性别:
- 来自: 广州
文章分类
最新评论
Jakarta POI 是一套用于访问微软格式文档的Java API。
Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于早在Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。它的官方首页是:http://jakarta.apache.org/poi/hssf/index.html,这里可以下载到它的最新版本和文档。
下面就来看看如何通过Jakarta POI的HSSF操作Excel文件。
操作Excel文件的步骤同JXL类似(关于如何用JXL操作Excel可以看我的另外两篇文章)。
HSSF对Excel的操作主要是通过下面几个对象实现:
HSSFWorkbook 工作簿对象对应于Excel文件
HSSFSheet Sheet对象对应于Excel中的Sheet
HSSFRow 行对象表示Sheet中的一行(这个对象在JXL中并没有提供)
HSSFCell 单元格对象
操作步骤就是用HSSFWorkbook打开或者创建“Excel文件对象”,用HSSFWorkbook对象返回或者创建Sheet对象,用Sheet对象返回行对象,用行对象得到Cell对象,有了Cell对象就随你读写了。下面来看一个动态生成Excel文件的例子:
//创建HSSFWorkbook对象
HSSFWorkbook wb = new HSSFWorkbook();
//创建HSSFSheet对象
HSSFSheet sheet = wb.createSheet("sheet0");
//创建HSSFRow对象
HSSFRow row = sheet.createRow((short)0);
//创建HSSFCell对象
HSSFCell cell=row.createCell((short)0);
//用来处理中文问题
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//设置单元格的值
cell.setCellValue("单元格中的中文");
//定义你需要的输出流
OutputStream out = new FileOutputStream("viwo.xls");
//输出Excel
wb.write(out);
out.flush();
HSSF读取文件同样还是使用这几个对象,只是把相应的createXXX方法变成了getXXX方法即可。
只要理解了其中原理,不管是读还是写亦或是特定格式都可以轻松实现,正所谓知其然更要知其所以然。
最后附上HSSF官方的QuickGuide:《Busy Developers' Guide to HSSF Features》,虽然是英文的但还是很容易理解的。
http://jakarta.apache.org/poi/hssf/quick-guide.html
一、示例1:
Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于早在Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。它的官方首页是:http://jakarta.apache.org/poi/hssf/index.html,这里可以下载到它的最新版本和文档。
下面就来看看如何通过Jakarta POI的HSSF操作Excel文件。
操作Excel文件的步骤同JXL类似(关于如何用JXL操作Excel可以看我的另外两篇文章)。
HSSF对Excel的操作主要是通过下面几个对象实现:
HSSFWorkbook 工作簿对象对应于Excel文件
HSSFSheet Sheet对象对应于Excel中的Sheet
HSSFRow 行对象表示Sheet中的一行(这个对象在JXL中并没有提供)
HSSFCell 单元格对象
操作步骤就是用HSSFWorkbook打开或者创建“Excel文件对象”,用HSSFWorkbook对象返回或者创建Sheet对象,用Sheet对象返回行对象,用行对象得到Cell对象,有了Cell对象就随你读写了。下面来看一个动态生成Excel文件的例子:
//创建HSSFWorkbook对象
HSSFWorkbook wb = new HSSFWorkbook();
//创建HSSFSheet对象
HSSFSheet sheet = wb.createSheet("sheet0");
//创建HSSFRow对象
HSSFRow row = sheet.createRow((short)0);
//创建HSSFCell对象
HSSFCell cell=row.createCell((short)0);
//用来处理中文问题
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//设置单元格的值
cell.setCellValue("单元格中的中文");
//定义你需要的输出流
OutputStream out = new FileOutputStream("viwo.xls");
//输出Excel
wb.write(out);
out.flush();
HSSF读取文件同样还是使用这几个对象,只是把相应的createXXX方法变成了getXXX方法即可。
只要理解了其中原理,不管是读还是写亦或是特定格式都可以轻松实现,正所谓知其然更要知其所以然。
最后附上HSSF官方的QuickGuide:《Busy Developers' Guide to HSSF Features》,虽然是英文的但还是很容易理解的。
http://jakarta.apache.org/poi/hssf/quick-guide.html
一、示例1:
package com.cplatform.contants; import java.io.FileOutputStream; import java.io.IOException; import java.util.Date; 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; import org.apache.poi.hssf.util.HSSFColor; public class A { /** * HSSFWorkbook excell的文档对象 HSSFSheet excell的表单 HSSFRow excell的行 HSSFCell * excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader * sheet头 HSSFFooter sheet尾 HSSFCellStyle cell样式 */ public static void main(String[] args) throws IOException { HSSFWorkbook wb = new HSSFWorkbook(); // 建立新HSSFWorkbook对象 HSSFSheet sheet = wb.createSheet("new sheet"); // 建立新的sheet对象 // Create a row and put some cells in it.Rows are 0 based. HSSFRow row = sheet.createRow((short) 0); // 建立新行 // Create a cell and put a value in it. HSSFCell cell = row.createCell((short) 0); // 建立新cell cell.setCellValue(1);// 设置cell的整数类型的值 // Or do it on one line. row.createCell((short) 1).setCellValue(1.2); // 设置cell浮点类型的值 row.createCell((short) 2).setCellValue("test"); // 设置cell字符类型的值 row.createCell((short) 3).setCellValue(true); // 设置cell布尔类型的值 HSSFCellStyle cellStyle = wb.createCellStyle(); // 建立新的cell样式 cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); // 设置cell样式为定制的日期格式 HSSFCell dCell = row.createCell((short) 4); dCell.setCellValue(new Date()); // 设置cell为日期类型的值 dCell.setCellStyle(cellStyle); // 设置该cell日期的显示格式 HSSFCell csCell = row.createCell((short) 5); csCell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断 csCell.setCellValue("中文测试_Chinese Words Test"); // 设置背景色 HSSFCellStyle style = wb.createCellStyle(); style .setFillForegroundColor(new HSSFColor.GREY_25_PERCENT() .getIndex()); style .setFillBackgroundColor(new HSSFColor.GREY_25_PERCENT() .getIndex()); style.setFillPattern(HSSFCellStyle.SPARSE_DOTS); HSSFCell cell1 = row.createCell((short) 6); cell1.setCellValue("X"); cell1.setCellStyle(style); // 设置背景色 HSSFCellStyle style1 = wb.createCellStyle(); style1.setFillForegroundColor(new HSSFColor.GREY_40_PERCENT() .getIndex()); style1.setFillBackgroundColor(new HSSFColor.GREY_40_PERCENT() .getIndex()); style1.setBorderBottom((short) 1); style1.setBorderTop((short) 1); style1.setBorderLeft((short) 1); style1.setBorderRight((short) 1); /** * 注意这句代码, style1.setFillPattern, 如果你在你的程序中不设置fill pattern,那么 * 你上面设置的前景色和背景色就显示不出来. */ style1.setFillPattern(HSSFCellStyle.SPARSE_DOTS); HSSFCell cell11 = row.createCell((short) 7); cell11.setCellValue("X11"); cell11.setCellStyle(style1); // 数字格式化 HSSFCellStyle st = wb.createCellStyle(); // 建立新的cell样式 st.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0")); HSSFCell cell12 = row.createCell((short) 8); cell12.setCellValue((double) 10000000); cell12.setCellStyle(st); cell12 .setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中文高位字节截断 cell12 .setCellValue("中文测试_Chinese Words Test");//设置中西文结合字符串 row.createCell((short) 9).setCellType(HSSFCell.CELL_TYPE_ERROR); // 建立错误cell // Write the output to a file FileOutputStream fileOut = new FileOutputStream("D:/workbook.xls"); wb.write(fileOut); fileOut.close(); } } 二、示例2: package com.cplatform.contants; 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 Exception { try { FileOutputStream fOut = new FileOutputStream(xlsFileName); workbook.write(fOut); fOut.flush(); fOut.close(); } catch (FileNotFoundException e) { throw new Exception(" 生成导出Excel文件出错! ", e); } catch (IOException e) { throw new Exception(" 写入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浮点数的显示格式 } 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 (Exception e1) { System.out.println(" 导出Excel文件[失败] "); e1.printStackTrace(); } } }
相关推荐
poi 操作excel模板,读取数据后,讲数据填充到新生成的文件中且提供下载
POI生成Excel POI读取Excel java操作Excel Servlet生成Excel web项目,包含含读取Excel与生成Excel方法
POI操作excel表格 讲的很详细,很有用
POI操作Excel生成水印,该水印其实就是一个图片,该代码是将文字生成图片,再将图片变成水印的。
通过反射和相应的约定实现POI操作Excel的封装
poi操作excel2007
poi操作excel的Demo
poi操作Excel详细帮助文档poi操作Excel详细帮助文档
Apache poi 操作 excel 文件压缩包,亲测可用
java操 作 excel2007 所使用poi.jar包,版本是poi_3.17.jar poi_3.15.jar,里面还有一个jxl.jar内容全面,实用性强.
为更方便的使用POI的API来操作Excel(2003)文件,对POI中针对Excel文件的读写进行了简单封装。此类中包含以下功能: 1.根据模板创建Excel文件 2.获取及更新Excel文件内容 3.创建、复制Sheet 4.设置Sheet名称 ... ...
poi操作excel所需的完整jar包,直接导入ide,buildpath即可使用,完整依赖,不会报noclassfoundexception
Java Poi 操作excel的API 好用
poi操作excel的全部jar包。poi操作excel的全部jar包。
这个是java用poi操作Excel进行导出,并且可以自动换行
POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法
POI使用excel模板循环输出行到文件并导出的一个小例子
POI操作Excel POI操作Excel POI操作Excel
使用POI操作Excel文件(写)可参考:http://blog.csdn.net/flyever581549/archive/2008/11/11/3275850.aspx
POI 操作Excel工具类;