在 Spring 项目里实现 Excel 文件的读写,可借助 Apache POI 或 EasyExcel 这两个常用的工具库。下面分别介绍这两种实现方式。
使用 Apache POI 实现 Excel 读写
1. 添加依赖
若使用 Maven 项目,需在 pom.xml
中添加如下依赖:
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
</dependencies>
2. 读取 Excel 文件
以下是一个简单的读取 Excel 文件的示例:
ExcelReader.java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ExcelReader {
public static void readExcel(String filePath) throws IOException {
try (FileInputStream file = new FileInputStream(new File(filePath));
Workbook workbook = new XSSFWorkbook(file)) {
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:
if (DateUtil.isCellDateFormatted(cell)) {
System.out.print(cell.getDateCellValue() + "\t");
} else {
System.out.print(cell.getNumericCellValue() + "\t");
}
break;
case BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
case FORMULA:
System.out.print(cell.getCellFormula() + "\t");
break;
default:
System.out.print("\t");
}
}
System.out.println();
}
}
}
}
3. 写入 Excel 文件
以下是一个简单的写入 Excel 文件的示例:
ExcelWriter.java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExcelWriter {
public static void writeExcel(String filePath) throws IOException {
try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream(filePath)) {
Sheet sheet = workbook.createSheet("Sheet1");
Row headerRow = sheet.createRow(0);
String[] headers = {"Name", "Age", "Email"};
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("John Doe");
dataRow.createCell(1).setCellValue(30);
dataRow.createCell(2).setCellValue("johndoe@example.com");
workbook.write(fileOut);
}
}
}
使用 EasyExcel 实现 Excel 读写
1. 添加依赖
若使用 Maven 项目,需在 pom.xml
中添加如下依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
2. 定义数据模型
import com.alibaba.excel.annotation.ExcelProperty;
public class User {
@ExcelProperty("Name")
private String name;
@ExcelProperty("Age")
private Integer age;
@ExcelProperty("Email")
private String email;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
3. 读取 Excel 文件
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelReader {
public static List<User> readExcel(String filePath) {
List<User> userList = new ArrayList<>();
EasyExcel.read(filePath, User.class, new AnalysisEventListener<User>() {
@Override
public void invoke(User user, AnalysisContext analysisContext) {
userList.add(user);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("Reading completed.");
}
}).sheet().doRead();
return userList;
}
}
4. 写入 Excel 文件
import com.alibaba.excel.EasyExcel;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelWriter {
public static void writeExcel(String filePath) {
List<User> userList = new ArrayList<>();
User user = new User();
user.setName("John Doe");
user.setAge(30);
user.setEmail("johndoe@example.com");
userList.add(user);
EasyExcel.write(filePath, User.class).sheet("Sheet1").doWrite(userList);
}
}
总结
- Apache POI:功能强大,能对 Excel 文件进行细致的操作,不过代码相对复杂。
- EasyExcel:使用简便,代码简洁,性能优良,适合快速开发。你可依据项目的具体需求来选择合适的工具库。