简介
EasyExcel是一个基于Apache POI的Excel处理工具,它能够以简单的方式读写大型Excel文件,并且性能高效、内存占用低。在SpringBoot中集成EasyExcel可以极大地提高数据处理效率。以下是EasyExcel在SpringBoot中的简单使用教程。
步骤1:添加依赖
首先,在你的SpringBoot项目的pom.xml
文件中添加EasyExcel的依赖。以下是依赖配置:
xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
步骤2:准备数据模型
创建一个用于存储数据的实体类。例如,我们创建一个Order
类来表示订单信息:
java
import lombok.Data;
@Data
public class Order {
private Long id;
private String productName;
private Integer quantity;
private BigDecimal price;
}
步骤3:实现Excel导出
定义一个名为ExcelExportUtil
的工具类,其中包含一个静态方法writeToExcel
。以下是导出Excel的示例代码:
java
import com.alibaba.excel.EasyExcel;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
public class ExcelExportUtil {
public static void writeToExcel(String filePath, List<Order> dataList) {
// 定义文件输出位置
FileOutputStream outputStream = new FileOutputStream(new File(filePath));
// 写入Excel
EasyExcel.write(outputStream, Order.class).sheet("订单信息").doWrite(dataList);
}
}
步骤4:实现Excel导入
创建一个自定义读监听器OrderExcelListener
,用于处理读取Excel时的数据:
java
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
public class OrderExcelListener extends AnalysisEventListener<Order> {
private List<Order> orderList = new ArrayList<>();
@Override
public void invoke(Order order, AnalysisContext analysisContext) {
orderList.add(order);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
System.out.println("所有数据解析完成!");
}
public List<Order> getOrderList() {
return orderList;
}
}
步骤5:Controller层实现
在Controller
层,添加两个接口,一个用于导出Excel,另一个用于导入Excel:
java
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
@RestController
public class ExcelController {
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
// 设置响应头
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("订单信息", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
// 模拟数据
List<Order> orderList = new ArrayList<>();
orderList.add(new Order(1L, "产品A", 10, new BigDecimal("100.00")));
orderList.add(new Order(2L, "产品B", 20, new BigDecimal("200.00")));
// 写入Excel
EasyExcel.write(response.getOutputStream(), Order.class).sheet("订单信息").doWrite(orderList);
}
@PostMapping("/import")
public String importExcel(@RequestParam("file") MultipartFile file) throws IOException {
OrderExcelListener listener = new OrderExcelListener();
EasyExcel.read(file.getInputStream(), Order.class, listener).sheet().doRead();
List<Order> orderList = listener.getOrderList();
// 这里可以将数据保存到数据库
orderList.forEach(System.out::println);
return "导入成功!";
}
}
步骤6:测试
启动SpringBoot应用后,访问以下接口进行测试:
- 导出:
http://localhost:8080/export
- 导入:通过Postman等工具,发送POST请求到
http://localhost:8080/import
,并上传一个包含订单信息的Excel文件。