1.选择合适的工具库:apache poi适合小文件操作,easyexcel适合大数据量场景。2.使用apache poi需手动处理单元格类型及数据读取。3.easyexcel通过实体类简化操作,支持监听器和低内存读写。4.常见问题包括格式兼容性、空行处理、日期解析及样式设置。掌握这两个库的使用能应对大多数excel导入导出需求。

在实际开发中,Java 实现 Excel 的导入导出功能非常常见,尤其是在数据报表、批量处理等场景中。本文将直接给出实现方式和关键点,帮助你快速掌握核心技巧。

一、选择合适的工具库
Java 中操作 Excel 最常用的库有两个:Apache POI 和 EasyExcel。
-
Apache POI 是老牌工具,支持
.xls和.xlsx格式,功能全面但使用起来略显繁琐。 - EasyExcel 是阿里巴巴开源的库,基于 POI 做了封装,更适合大数据量读写,性能更好,推荐用于新项目。
如果只是简单的小文件操作,POI 足够;如果涉及大批量数据,优先考虑 EasyExcel。
二、使用 Apache POI 实现基本的导入导出
导出 Excel 示例:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelExport {
public static void main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("用户列表");
Row headerRow = sheet.createRow(0);
String[] headers = {"ID", "姓名", "年龄"};
for (int i = 0; i < headers.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(headers[i]);
}
// 添加数据行
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue(1);
dataRow.createCell(1).setCellValue("张三");
dataRow.createCell(2).setCellValue(25);
try (FileOutputStream fos = new FileOutputStream("users.xlsx")) {
workbook.write(fos);
}
}
}导入 Excel 示例:
import org.apache.poi.ss.usermodel.*;
public class ExcelImport {
public static void main(String[] args) throws Exception {
Workbook workbook = WorkbookFactory.create(new File("users.xlsx"));
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
System.out.print(cell.toString() + "\t");
}
System.out.println();
}
}
}注意:
立即学习“Java免费学习笔记(深入)”;
BJXSHOP网上开店专家下载BJXShop网上购物系统是一个高效、稳定、安全的电子商店销售平台,经过近三年市场的考验,在中国网购系统中属领先水平;完善的订单管理、销售统计系统;网站模版可DIY、亦可导入导出;会员、商品种类和价格均实现无限等级;管理员权限可细分;整合了多种在线支付接口;强有力搜索引擎支持... 程序更新:此版本是伴江行官方商业版程序,已经终止销售,现于免费给大家使用。比其以前的免费版功能增加了:1,整合了论坛
- 处理数字单元格时要判断类型
cell.getCellType() == CellType.NUMERIC- 字符串用
getStringCellValue()获取- 可以结合
Map或实体类来存储每一行数据
三、使用 EasyExcel 简化操作(推荐)
定义实体类:
@Data
public class User {
@ExcelProperty("ID")
private int id;
@ExcelProperty("姓名")
private String name;
@ExcelProperty("年龄")
private int age;
}导出操作:
ListuserList = new ArrayList<>(); // 添加测试数据 userList.add(new User(1, "张三", 25)); userList.add(new User(2, "李四", 30)); EasyExcel.write(new File("users_easy.xlsx"), User.class) .sheet("用户列表") .doWrite(userList);
导入操作:
Listusers = new ArrayList<>(); EasyExcel.read(new File("users_easy.xlsx"), User.class, new PageReadListener (users::addAll)) .sheet() .doRead();
使用 EasyExcel 的优势在于:
- 不用手动处理各种单元格类型
- 支持监听器异步读取
- 内存占用低,适合百万级数据导入导出
四、一些容易踩坑的地方
文件格式兼容性问题
.xls和.xlsx是两种不同格式,Apache POI 需要用不同的类(HSSF vs XSSF)来处理。空行或空单元格处理
有些时候 Excel 文件中间有空白行或列,遍历的时候要注意跳过。日期格式解析异常
Excel 中的日期本质上是数字,需要通过DateUtil.isCellDateFormatted(cell)来判断是否为日期,并用getDateCellValue()正确获取。样式设置复杂
如果需要设置字体、背景色、边框等样式,Apache POI 需要创建CellStyle并复用,不能每次都新建。
基本上就这些内容了。掌握了 Apache POI 和 EasyExcel 的使用,你可以应对大部分 Excel 导入导出的需求。刚开始可能会觉得 API 多不好记,但多练几次就能熟练上手。











