5、需要准备对应的模版excel,同时在里面添加想要输入的字段信息
6、使用ApiPost进行Controller接口的测试(导入模版文件执行)
1、 EasyExcel简介
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。
EasyExcel读取Excel的解析原理:
2、导入相应的依赖文件
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.3</version>
</dependency>
3、编写对应数据库字段的pojo类,使用注解注入
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName("t_ordersetting")
public class OrderSetting {
@TableId(type = IdType.AUTO)
private Integer id;
//将java实体的属性和excel文件的列对应起来
@ExcelProperty("日期")
@TableField(value = "orderDate")
private Date orderDate;
@ExcelProperty("可预约数量")
private Integer number;
private Integer reservations = 0;
}
4、编写对应下载的接口文件
(这里为固定的模版,不需要可以的去记录,大概了解执行流程即可,取即可用)
@PostMapping("/upload")
public Result upload(MultipartFile excelFile) throws IOException {
//springboot项目回头发布时,以jar包形式发布,接收文件时,能否将一个文件写到项目的jar包中? 无法实现的
//springboot项目接受文件时,一般采用外部存储方式进行存储.① 存到服务器的本地(某个目录) ② 存储到分布式文件存储系统里(七牛云、阿里云、fastdfs、minio)
if (excelFile != null) {
//将文件存储到当前机器的某个目录
String baseDir = "/Users/xixi/Desktop/helpht";
//获取上传的文件的文件名 (ordersetting_template.xlsx)
String originalFilename = excelFile.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
//生成一个唯一文件名
String uniqueFilename = UUID.randomUUID().toString().replaceAll("-", "") + suffix;
String dirPath = baseDir ;
//确保存放文件的目录是存在的
File dirFile = new File(dirPath);
if (!dirFile.exists()){
dirFile.mkdirs();
}
//最终存放文件的文件路径
String filePath = dirPath + "/" + uniqueFilename;
//保存文件
excelFile.transferTo(new File(filePath));
//读取上传后的文件中的内容,将数据添加/更新到ordersetting表中
/*
参数一File file: 要读取的目标文件
参数二Class head :将目标文件中的行记录封装到java的那个类型对象
参数三ReadListener readListener :读取过程中的回调对象(每读取一行,封装成一个对象后,都会触发这个对象的invoke方法)
*/
List<OrderSetting> orderSettings = new ArrayList<>();
EasyExcel.read(new File(filePath),OrderSetting.class,new SyncReadListener(){
@Override
public void invoke(Object object, AnalysisContext context) {
orderSettings.add((OrderSetting) object);
}
}).doReadAll();
//更新或者添加
for (OrderSetting orderSetting : orderSettings) {
ordersettingService.addOrUpdate(orderSetting);
}
return Result.success(null);
}
return Result.error(Result.ERROR,"文件不能为空");
}