简介
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
类来表示订单信息:
import lombok.Data;@Data
public class Order {private Long id;private String productName;private Integer quantity;private BigDecimal price;
}
步骤3:实现Excel导出
定义一个名为ExcelExportUtil
的工具类,其中包含一个静态方法writeToExcel
。以下是导出Excel的示例代码:
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));// 写入ExcelEasyExcel.write(outputStream, Order.class).sheet("订单信息").doWrite(dataList);}
}
步骤4:实现Excel导入
创建一个自定义读监听器OrderExcelListener
,用于处理读取Excel时的数据:
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;public class OrderExcelListener extends AnalysisEventListener<Order> {private List<Order> orderList = new ArrayList<>();@Overridepublic void invoke(Order order, AnalysisContext analysisContext) {orderList.add(order);}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {System.out.println("所有数据解析完成!");}public List<Order> getOrderList() {return orderList;}
}
步骤5:Controller层实现
在Controller
层,添加两个接口,一个用于导出Excel,另一个用于导入Excel:
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")));// 写入ExcelEasyExcel.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文件。