注意自己的ExcelDemo字段与实体类的差别! 这是我犯的错…
1.依赖添加
com.alibaba
easyexcel
2.2.6
2.创建excel操作的Demo类
@Data
public class TeacherDemo {
@ExcelProperty(index = 0,value=“讲师工号”)
private Integer id;
@ExcelProperty(index = 1,value="讲师姓名")
private String name;
@ExcelProperty(index = 2,value="讲师密码")
private String password;
@ExcelProperty(index = 3,value="讲师年龄")
private Integer age;
@ExcelProperty(index = 4,value="讲师性别")
private String gander;
@ExcelProperty(index = 5,value="电子邮箱")
private String email;
@ExcelProperty(index = 6,value="电话号")
private String phoneNum;
@ExcelProperty(index = 7,value="年级(XX级)")
private String grade;
@ExcelProperty(index = 8,value="班级(XX专业XX班)")
private String classRoom;
3.创建监听器继承AnalysisEventListener类
@Component
public class ExcelListener extends AnalysisEventListener {
@Resource
private TeacherService teacherService;
public ExcelListener() {
}
public ExcelListener(TeacherService teacherService) {
this.teacherService = teacherService;
}
@Override
public void invoke(TeacherDemo demo, AnalysisContext analysisContext) {
//逻辑处理的位置就是这个方法!
Teacher teacher = new Teacher();
teacher.setId(demo.getId());
teacher.setName(demo.getName());
teacherService.save(teacher);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
}
}
4.导出接口的方法:
@GetMapping("export")
public R getList(){
QueryWrapper<Teacher> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("gmt_create");
List<Teacher> list = teacherService.list(wrapper);
List<TeacherDemo> list1 = new ArrayList<>();
//demo赋值
for (int i = 0; i < list.size(); i++){
TeacherDemo teacherDemo = new TeacherDemo();
teacherDemo.setId(list.get(i).getId());
teacherDemo.setName(list.get(i).getName());
list1.add(teacherDemo);
}
EasyExcel.write("D://文件名称.xlsx", TeacherDemo.class).sheet("讲师列表").doWrite(list1);
return R.ok().message("导出成功!");
}
同样的应用前端可以直接@click除法,正常写法。
5.导入方法接口
@PostMapping("import")
public R importList(@RequestPart("file") MultipartFile file){
try {
InputStream inputStream = file.getInputStream();
EasyExcel.read( inputStream,TeacherDemo.class,new ExcelListener(teacherService)).sheet().doRead();
return R.ok().message("导入成功!");
} catch (IOException e) {
e.printStackTrace();
}
return R.error().message("导入失败!");
}
Vue端调用:<el-upload
:show-file-list="false"
:on-success="handleSuccess"
action="http://localhost:0000/xxxx/import">
<el-button type="primary">导入<i class="el-icon-download"></i></el-button>
</el-upload>
handleSuccess(){
this.$message({
type: "success",
message: "导入成功!",
});
this.selectAllTeacher()
},