1.前端使用element ui
1.1下载
npm i element-ui -S
1.2引入
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI,{size:'mini'});
导入jar包(后端)
<!-- hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-poi</artifactId>
<version>5.8.18</version>
</dependency>
<!-- poi-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
2.导出(前端)
<template>
<el-button type="primary" @click="exportBtn" class="ml-5">导出<i class="el-icon-upload2"></i></el-button>
</template>
<script>
method(){
exportBtn() {
window.open("http://localhost:9090/user/download", '_top')
},
}
</script>
后端、下载数据库中的数据到xlsx文件中(导出)
//下载xlsx文件(下载)
@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
List<User> list = userService.list();
//这个函数将一个List类型的参数list转换为ArrayList类型的对象,并将其赋值给users变量。
//ArrayList是一种动态数组,它可以在运行时添加或删除元素。
// ArrayList<User> users = CollUtil.newArrayList(list);
// 通过工具类创建writer
// 写到指定位置上
// ExcelWriter writer = ExcelUtil.getWriter("d:/writeBeanTest.xlsx");
//先不指定下载位置,以便于生成在浏览器中
//创建xlsx格式的
ExcelWriter writer = ExcelUtil.getWriter(true);
// 自定义标题名称
// writer.addHeaderAlias("id", "编号");
writer.addHeaderAlias("username", "姓名");
writer.addHeaderAlias("password", "密码");
writer.addHeaderAlias("nickname", "别名");
writer.addHeaderAlias("email", "邮箱");
writer.addHeaderAlias("phone", "手机号");
writer.addHeaderAlias("address", "地址");
writer.addHeaderAlias("createTime", "创建事件");
// 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之
writer.setOnlyAlias(true);
// 一次性写出内容,使用默认样式,并输出标题
writer.write(list, true);
//response为HttpServletResponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//编写文件格式
String filename = URLEncoder.encode("用户信息", "UTF-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition", "attachment;filename=" + filename + ".xlsx");
//获取输出流
ServletOutputStream out = response.getOutputStream();
//写出文件
writer.flush(out, true);
//关闭输出流
out.close();
// 关闭writer,释放内存
writer.close();
}
3.导入、前端
<template>
<el-upload action="http://localhost:9090/user/import"
style="display: inline-block"
accept="xlsx"
:show-file-list="false"
:on-success="uploadSuccess">
<el-button type="primary">导入<i class="el-icon-download"></i></el-button>
</el-upload>
</template>
<script>
method(){
//导入文件-成功回调
uploadSuccess() {
this.$message.success("上传成功")
this.load()
},
}
</script>
后端、上传xlsx文件数据到数据库中(导入)
@PostMapping("/import")
public boolean importExcel(MultipartFile file) throws IOException {
//创建流对象
InputStream inputStream = file.getInputStream();
//ExcelReader对象
ExcelReader reader = ExcelUtil.getReader(inputStream);
//设置表头别名(改为数据库中对应的字段名)
reader.addHeaderAlias("姓名", "username");
reader.addHeaderAlias("密码", "password");
List<User> users = reader.readAll(User.class);
//存入数据库
userService.saveBatch(users);
return true;
}