目录
1.背景
实际生产中导入数据的功能经常遇到,今天我们来学习使用easyExcel实现导入
2.实现
在Spring MVC中导入Excel文件,可以使用阿里巴巴的EasyExcel库。以下是一个简单的例子,展示了如何使用EasyExcel导入Excel文件。
2.1.添加EasyExcel依赖
首先,添加EasyExcel的依赖到你的pom.xml
文件中:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
2.2.创建一个Excel模型对象来映射Excel数据
然后,创建一个Excel模型对象来映射Excel数据:
import com.alibaba.excel.annotation.ExcelProperty;
public class ExcelData {
@ExcelProperty(index = 0)
private String column1;
@ExcelProperty(index = 1)
private String column2;
// 省略getter和setter方法
}
2.3.创建一个Controller来处理文件上传和解析
接下来,创建一个Controller来处理文件上传和解析:
import com.alibaba.excel.EasyExcel;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
@RestController
public class ExcelController {
/**
* 文件导入
* @param dto 普通参数
* @param file 导入的文件
* @return
*/
@PostMapping("/importExcel")
public String importExcel(UserAddDTO dto,MultipartFile file) {
try {
List<ExcelData> list = EasyExcel.read(file.getInputStream())
.head(ExcelData.class)
.sheet()
.doReadSync();
// 处理解析到的数据
for (ExcelData data : list) {
// 处理每一行的数据
}
return "导入成功";
} catch (IOException e) {
e.printStackTrace();
return "导入失败";
}
}
}
在上述代码中,我们定义了一个/importExcel
的POST端点,用于接收上传的Excel文件。使用EasyExcel的read
方法读取文件,并将读取到的数据映射到我们之前定义的ExcelData
类的实例上。最后,你可以在这里添加你自己的逻辑来处理这些数据。
3.测试
代码:
@Test
public void addUserByImportExcel() {
String url = localhost + "/importExcel";
HttpRequest request = HttpUtil.createPost(url);
// 普通参数
Map<String, Object> param = new HashMap<>();
param.put("partnerId", "1041");
param.put("status", "0");
param.put("userType", "2");
// 上传的文件参数
File file = new File("H:\\e\\t1.xlsx");
param.put("file", file);
request.form(param);
request.header("token", token);
System.out.println("请求url:" + url);
System.out.println("请求参数:" + param);
String response = request.execute().body();
System.out.println("请求响应:" + response);
}