答案:Java操作Excel常用Apache POI和EasyExcel,前者适合小数据量及样式控制,后者适用于大数据量高性能场景。

Java操作Excel文件最常用的方式是使用Apache POI和EasyExcel。两者都能实现对Excel的读写,但适用场景略有不同。下面分别介绍它们的基本用法和特点。
1. 使用Apache POI读写Excel
Apache POI是Apache基金会提供的开源库,支持读写Microsoft Office格式文件,包括Excel(.xls和.xlsx)。
核心依赖:在Maven项目中添加以下依赖:
对于XLS(2003格式):
立即学习“Java免费学习笔记(深入)”;
- poi: 最基础的包
对于XLSX(2007+格式):
- poi-ooxml: 支持xlsx格式
完整依赖示例:
org.apache.poi poi-ooxml 5.2.3
写入Excel示例:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
public class WriteExcel {
public static void main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("用户数据");
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("姓名");
header.createCell(1).setCellValue("年龄");
Row row = sheet.createRow(1);
row.createCell(0).setCellValue("张三");
row.createCell(1).setCellValue(25);
try (FileOutputStream out = new FileOutputStream("users.xlsx")) {
workbook.write(out);
}
workbook.close();
}
}
读取Excel示例:
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
public class ReadExcel {
public static void main(String[] args) throws Exception {
try (FileInputStream fis = new FileInputStream("users.xlsx");
Workbook workbook = new XSSFWorkbook(fis)) {
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
switch (cell.getCellType()) {
case STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
default:
System.out.print("未知\t");
}
}
System.out.println();
}
}
}
}
2. 使用EasyExcel读写Excel
EasyExcel是阿里巴巴开源的框架,基于POI封装,解决了大文件内存溢出问题,适合处理大量数据的导入导出。
优点:- 内存占用低:采用SAX模式逐行读取,不将整个文件加载到内存
- API简单:通过注解绑定实体类,简化代码
- 性能好:适合百万级数据处理
com.alibaba easyexcel 3.3.2
定义数据模型:
public class User {
private String name;
private Integer age;
// getter/setter 省略
}
写入Excel:
import com.alibaba.excel.EasyExcel;
import java.util.Arrays;
import java.util.List;
public class EasyWrite {
public static void main(String[] args) {
List data = Arrays.asList(
new User("李四", 30),
new User("王五", 28)
);
String fileName = "users_easy.xlsx";
EasyExcel.write(fileName, User.class).sheet("模板").doWrite(data);
}
}
读取Excel:
public class EasyRead {
public static void main(String[] args) {
String fileName = "users_easy.xlsx";
EasyExcel.read(fileName, User.class, new PageReadListener(dataList -> {
for (User user : dataList) {
System.out.println("读取到:" + user.getName() + ", " + user.getAge());
}
})).sheet().doReadAll();
}
}
3. POI vs EasyExcel 如何选择?
根据实际需求决定使用哪个工具:
- 如果只是处理小量数据(几千行以内),结构复杂或需要样式控制,推荐使用Apache POI
- 如果是大批量数据导入导出(如报表、日志),注重性能和稳定性,优先选择EasyExcel
- EasyExcel更适合Web应用中的上传下载场景
- POI更灵活,可以精确控制单元格样式、合并、图表等高级功能











