EasyExcel官网:读Excel | Easy Excel (alibaba.com)
目录结构:
1.Maven依赖
这里注意我使用的是3.1.x的版本,大版本语法会不一样。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
2.编写实体类
这里需要认识几个注解,设置导入导出时比对你的字符串。
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Jin {
//实体类 对应你导出的字段
@ExcelIgnore
private int id;
@ColumnWidth(20)
@ExcelProperty("员工姓名")
private String name;
@ColumnWidth(20)
@ExcelProperty("上班时间")
private String starttime;
@ColumnWidth(20)
@ExcelProperty("下班时间")
private String endtime;
}
3.设置文件下载地址
配置类
public class TestFileUtil {
//文件上传下载地址设置为D盘 你自己可以设置 方法有很多
public static String getPath() {
return "D:/";
}
}
4.编写导出接口
这里下载地址在D盘,发送请求之后直击去D盘查看就行。
String fileName = TestFileUtil.getPath() + "Jin" + System.currentTimeMillis() + ".xlsx";
文件下载名字。
EasyExcel.write(fileName, Jin.class).sheet("用户表").doWrite(jinServer.list());
这里需要自己改jinServer.list()这个就是查询出来的所以数据,需要自己根据业务写。
//导出 导出 直接发送请求 就会下载到你的D盘
@PostMapping("ExportExcel")
public void ExportExcel() {
String fileName = TestFileUtil.getPath() + "Jin" + System.currentTimeMillis() + ".xlsx";
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为用户表 然后文件流会自动关闭
EasyExcel.write(fileName, Jin.class).sheet("用户表").doWrite(jinServer.list());
}
5.编写文件上传
这个官网也有demo,下面foreach需要你自己写插入数据 这里我用的MP快速插入。
没有写前端,直接写死的文件地址,所以直接发送请求数据就到数据库了。
//导入 这个地方我没有写前端 直接写死的文件地址 也是一样的
@PostMapping("ImportExcel")
public void ImportExcel() {
//设置指定导入文件的绝对路径,我这里是要导入user.xlsx
String fileName = TestFileUtil.getPath() + File.separator + "Jin1669343889185.xlsx";
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
// 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行
EasyExcel.read(fileName, Jin.class, new PageReadListener<Jin>(dataList -> {
for (Jin user : dataList) {
//将导入的数据用mybatisPlus一个个添加进数据库
jinMapper.insert(user);
}
})).sheet().doRead();
}