java中导入导出Excel文件

guxq1988 贡献于2012-04-04

作者 番茄花园  创建于2011-07-05 07:34:00   修改者single  修改于2012-01-06 13:29:00字数3908

文档摘要:Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。
关键词:

java中导入导出Excel文件 一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。 二.HSSF概况 HSSF 是sHorrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。 也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。 HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。 三.开始编码 1 . 准备工作 要求:JDK 1.4+POI开发包 可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包 2 . EXCEL 结构 HSSFWorkbook excel 文档对象介绍 HSSFSheet excel的表单 HSSFRow excel的行 HSSFCell excel的格子单元 HSSFFont excel字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader sheet头 HSSFFooter sheet尾 和这个样式 HSSFCellStyle cell样式 辅助操作包括 HSSFDateUtil 日期 HSSFPrintSetup 打印 HSSFErrorConstants 错误信息表 4 . 可参考文档 POI 主页:http://jakarta.apache.org/poi/, 初学者如何快速上手使用POI HSSF http://jakarta.apache.org/poi/hssf/quick-guide.html 。 代码例子 http://blog.java-cn.com/user1/6749/archives/2005/18347.html 里面有很多例子代码,可以很方便上手。 四.使用心得 POI HSSF 的usermodel包把Excel文件映射成我们熟悉的结构,诸如Workbook、Sheet、Row、Cell等,它把整个结构以一组对象的形式保存在内存之中,便于理解,操作方便,基本上能够满足我们的要求,所以说这个一个不错的选择。 1.创建工作簿 (WORKBOOK) Java代码 package Excel2003; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; /* * To change this template, choose Tools | Templates and open the template in * the editor. */ /** * 本文档用来学习POI,即使用java导入导出excel表格,创建数据表 * * @author single */ public class Excel2003_poi_creat { /** * @param args the command line arguments */ public static void main(String[] args) { //Excel2003文档的创建,即扩展名为.xls try { //创建一个工作簿 Workbook wb = new HSSFWorkbook(); CreationHelper createHelper = wb.getCreationHelper(); //创建两个工作表,sheet1和sheet2 Sheet sheet1 = wb.createSheet("sheet1"); Sheet sheet2 = wb.createSheet("sheet2"); // 在Excel工作表中插入一行数据 Row row = sheet1.createRow((short) 0);//此处数字为在第几行插入数据,0表示工作表第1行,1表示第2行,以此类推 // Create a cell and put a value in it. //创建一个单元并把数据写入,0表示第N行第1个单元格,1表示第N行第2个单元格 Cell cell = row.createCell(0);//此处为单元序号 cell.setCellValue("'001");//此处为数据 // Or do it on one line. //你也可以用一行代码来写入数据 row.createCell(1).setCellValue(1.2);//createCell(1)表示在第2个单元格写入,setCellValue(1.2)表示写入数据1.2 row.createCell(2).setCellValue(createHelper.createRichTextString("这就是我")); row.createCell(3).setCellValue(true); //创建文件 try (FileOutputStream fileOut = new FileOutputStream("e://workbook.xls")) { wb.write(fileOut); fileOut.close(); } } catch (IOException e) { } } } /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Excel2003; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; import org.apache.poi.hssf.extractor.ExcelExtractor; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.*; /** * * @author single */ public class Excel2003_poi_read { /** * @param args the command line arguments */ public static void main(String[] args) { try { //读取要导出的excel文件 POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("e://test.xls")); HSSFWorkbook wb = new HSSFWorkbook(fs); ExcelExtractor extractor = new ExcelExtractor(wb); extractor.setFormulasNotResults(false); extractor.setIncludeSheetNames(false); //工作表的序号 Sheet sheet1 = (Sheet) wb.getSheetAt(0); //开始遍历整个工作表 // /** for (Iterator it = sheet1.rowIterator(); it.hasNext();) { Row row = (Row) it.next(); for (Iterator cit = row.cellIterator(); cit.hasNext();) { //输出数据 if (cit.next().getCellType() == Cell.CELL_TYPE_FORMULA) { Cell cell = cit.next(); FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); //把公式行的数据计算出来 CellValue cellValue = evaluator.evaluate(cell); System.out.println(cellValue.toString()+","); }else{ System.out.print(cit.next().toString() + ","); } } }**/ // } catch (FileNotFoundException ex) { Logger.getLogger(Excel2003_poi_read.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Excel2003_poi_read.class.getName()).log(Level.SEVERE, null, ex); } } }

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ] 9 人已下载

下载文档