Java实现excel导入导出
涉及技术:Struts2框架(文件上传)、xml解析技术(定制导入模板)、JQuery EasyUI
使用 new File(“路径/文件名”);获取文件实例
使用 common-io下的FileUtils 工具类调用 .openInputStream(文件实例)获取匿名对象
使用匿名对象为构造参数创建 Excel 工作簿 ,new HSSFWorkbook(输出流匿名对象)
根据工作簿实例获取 工作表 sheet 的实例 HSSFSheet ;
使用 .getLastRowNum() 可获取sheet 中的最后一行行号,根据行号遍历每一行;
每一行中使用 sheet.getRow(索引) 获取每一行的实例;使用 .getLastCellNum()获取行中的最后一列索引;
遍历当前行的每一列,使用 row.getCell()获取行中每一列的单元格对象;
使用 .getStringCellValue() 获取每个单元格对象的值
最终将 excel 文件下载到本地,需创建一个文件;
具体根据 File 的实例调用 .createNewFile(); 创建一个新的文件;
使用工具类中的FileUtils.openOutputStream(file);创建输出流对象
将工作簿 使用 .write(stream);的方式将数据输出
最终需要执行流的关闭操作
基于poi 里创建 excel 表单文件,
创建 HSSFWorkbook() 的实例,其实例便是一个工作薄;
再根据工作簿创建对应的工作表 sheet , 使用 .createSheet();
数据的添加使用 工作表 sheet 创建要存放数据的行, sheet .createRow(索引),返回值是 HSSFRow 代表行;
插入数据时需根据插入位置创建当前行的每一列单元格: 使用HSSFRow的实例 调用 .createCell(索引)创建单元格,并使用setCellValue()执行数据的插入
从指定路径下的 excel 文件中获取数据的方式,
根据 new File("xxx")的匿名对象为形参使用Workbook.getWorkbook()获取工作簿
根据工作簿中工作表的页面索引获取对应页面的工作表 sheet
从所获取的工作表 sheet 中 遍历每一行 : sheet.getRows()
从所获取的工作表 sheet 中 遍历每一列 : sheet.getColumns()
根据行列的索引获取每个单元格的数据
成功执行的 JXL 效果图
excel的创建:
声明Excel文件路径 new File ("xx/xx.xls")
根据路径实例创建 excel 工作簿
创建工作簿的页码, excel 是可以有多个页面的,每页使用 sheet1 表示
需要创建多个页面时只需要使用 workbook.createSheet(“页码”,索引位置(从0开始))就可以了
excel 表格内部的元素声明使用 Label (标签)来表示,根据 new Label(xx,xx,xx);的构造方法来存入对应参数;其参数配置为(第几列,第几行,值)来进行表示;例: 最左上角的为 (0,0,"列名")表示第0列第0行,值为"列名"
读写Excel的三种常见技术
row 行
cell 列
sheet表
生成导入模板

使用POI导出excel
public class PoiReadExcel {
public static void main(String[] args) {
//需要解析的Excel文件
File file = new File("e:/poi_test.xls");
try {
//创建工作簿,读取文件内容
HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
//读取Excel文件的第一个工作页
//方式一
//HSSFSheet sheet = workbook.getSheet("sheet0");
//方式二
HSSFSheet sheet = workbook.getSheetAt(0);
int firstRowNum = 0; //第一行
//获取sheet中最后一行行号
int lastRowNum = sheet.getLastRowNum(); //获取最后一行
for(int i=0;i<=lastRowNum;i++){
HSSFRow row = sheet.getRow(i);
//获取当前行最后单元格列号
int lastCellNum = row.getLastCellNum();
//循环这一行来读取每一个单元格中的内容
for(int j=0;j<lastCellNum;j++){
//读取
HSSFCell cell = row.getCell(j);
String value = cell.getStringCellValue();
System.out.print(value+" ");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
通过POI创建EXCEL
引入POI相关的jar包poi-xxx.jar
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author xueli.li
* @create 2018/12/13 20:00
* @Description:
**/
public class PoiExpExcel {//POI生成Excel文件
public static void main(String[] args) {
String[] title = {"id", "name", "sex"};
//创建Excel工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个工作表sheet
HSSFSheet sheet = workbook.createSheet();
//创建第一行
HSSFRow row = sheet.createRow(0);
HSSFCell cell = null;
//插入第一行数据 id,name,sex
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
//追加数据
for (int i = 1; i <= 10; i++) {
HSSFRow nextrow = sheet.createRow(i);
HSSFCell cell2 = nextrow.createCell(0);
cell2.setCellValue("a" + i);
cell2 = nextrow.createCell(1);
cell2.setCellValue("user" + i);
cell2 = nextrow.createCell(2);
cell2.setCellValue("男");
}
//创建一个文件
File file = new File("e:/poi_test.xls");
try {
file.createNewFile();
//将Excel内容存盘//FileUtils类来自commons-io.jar包
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
jXL读取EXCEL
public class JslReadExcel {
public static void main(String[] args) {
//File file = new File("e:/jxl_test.xls");
try {
//创建工作簿
Workbook workbook = Workbook.getWorkbook(new File("e:/jxl_test.xls"));
//获取第一个工作表sheet页
Sheet sheet = workbook.getSheet(0);
//循环获取
//1.循环行
for(int i=0;i<sheet.getRows();i++){
//2.循环列
for(int j=0;j<sheet.getColumns();j++){
//获取单元格内容
Cell cell = sheet.getCell(j,i);
System.out.print(cell.getContents()+" ");
}
System.out.println();
}
//关闭流
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
JXL创建Excel
下载并导入jxl.jar
public class JxlExcel {
public static void main(String[] args) {
//用数组存表头
String[] title={"id","name","sex","age"};
//创建Excel文件
File file = new File("e:/jxl_test.xls");
try {
file.createNewFile();
//创建工作簿
WritableWorkbook workbook = Workbook.createWorkbook(file);
//创建sheet
WritableSheet sheet = workbook.createSheet("sheet1", 0);
//往sheet中添加数据
Label label = null;
//第一行设置列名
for(int i=0;i<title.length;i++){
//Label(i,0,title[i]) 表示第i列第0行,值为title[i]
label = new Label(i,0,title[i]);
//添加单元格
sheet.addCell(label);
}
//追加数据
for(int i=1;i<10;i++){
//Label(0,i,"a"+1) 表示第0列,第i行,值为“a”+1
label = new Label(0,i,"a"+i);
sheet.addCell(label);
label = new Label(1,i,"user"+i);
sheet.addCell(label);
label = new Label(2,i,"男");
sheet.addCell(label);
label = new Label(3,i,"20");
sheet.addCell(label);
}
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
读写excel三种常用技术
POI
JXL
FASTEXCEL







POI和JXL对比
读写excel三种常用技术
POI
JXL
FASTEXCEL
定制excel导入模板
定制excel导入模板