EasyPoi是一个基于Java的Excel导入导出框架,主要提供了Excel读取、写入等基本功能,并且支持通过注解来定义Excel文件的格式。
添加maven依赖
<dependencies>
<!--基础模块,提供了Excel读取、写入等基本功能-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
<!--Web模块,提供了在Web应用中使用EasyPoi的相关功能-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.2.0</version>
</dependency>
<!--注解模块,提供了一些用于Excel导入导出的注解,例如@Excel、@ExcelField等-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.2.0</version>
</dependency>
<!--基于Hibernate的Java Bean验证框架,提供了一些常用的验证注解,例如@NotNull..-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
<!--javax.el提供了Java EL的实现,简化Java应用程序中表达式的语言-->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b11</version>
</dependency>
</dependencies>
注解定义Excel文件的格式
//指定了生成Excel文件时的sheet名称
@ExcelTarget("EasyPoi")
public class UserBean {
/*指定了生成Excel文件时该属性对应的列名称,
即生成的Excel文件中会有“编号”、“用户名”、“生日”和“工资”四列。*/
@Excel(name = "编号")
private Integer id;
@Excel(name = "用户名")
private String name;
@Excel(name = "生日")
private String birthday;
@Excel(name = "工资")
private Integer money;
}
导出
@RestController
@RequestMapping("user")
public class UserController {
@RequestMapping("uploadExcel")
public String upload(MultipartFile excel) throws Exception {
//初始化设置
ImportParams params = new ImportParams();
//设置 读取第几个选项卡
params.setSheetNum(1);
//设置表头 占几行
params.setHeadRows(1);
params.setTitleRows(1);
//将上传Excel数据 封装成用户集合
//第一个参数为:上传文件的读取流
//第二个参数为:要封装实体对象的类模板
//第三个参数为:初始化对象
List<UserBean> list = ExcelImportUtil.importExcel(
excel.getInputStream(),UserBean.class,params);
System.out.println(list);
return "ok";
}
}
MultipartFile是Spring框架中的一个接口,用于处理HTTP multipart请求中的文件上传。当客户端上传文件时,服务器端可以通过MultipartFile接口获取上传的文件内容、文件名、文件类型等信息,并且可以将文件保存到本地磁盘或者其他存储介质中。
getName():获取上传文件的参数名称。
getOriginalFilename():获取上传文件的原始文件名。
getContentType():获取上传文件的类型。
getSize():获取上传文件的大小。
getBytes();获取上传文件的字节数组。
getInputStream();获取上传文件的InputStream流。
transferTo():将上传文件保存到指定目录中。
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="axios.min.js"></script>
<script src="util.js"></script>
<script>
function uploadExcel() {
//使用FormData对象来创建表单数据
let formObj = new FormData;
//将上传的Excel文件添加到表单数据中
//第一个参数:将获取到的文件添加到名为excel的FormData对象中
//第二个参数:获取了id为excelFile的文件上传控件
//第三个参数:获取了文件上传控件中选择的文件列表中的第一个文件
formObj.append("excel",$("excelFile").files[0]);
let config={
headers: {'Content-Type': 'multipart/form-data' }
}
axios.get("/user/uploadExcel",formObj,config).then(resp=>{
alert(resp.data);
})
}
</script>
</head>
<body>
请选择Excel:<input type="file" id="excelFile"><br>
<input type="button" value="上传" onclick="uploadExcel()">
</body>
注意,如果要上传多个文件,可以在append方法中使用循环来逐一添加到FormData对象中。