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 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);
//开始遍历整个工作表
//<editor-fold defaultstate="collapsed" desc="comment">
/** for (Iterator<Row> it = sheet1.rowIterator(); it.hasNext();) {
Row row = (Row) it.next();
for (Iterator<Cell> 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() + ",");
}
}
}**/
//</editor-fold>
} 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);
}
}
}