SpringBoot集成easypoi快速入门(Excel导入导出工具)
简介:
easypoi是一款Excel快速导入导出的工具,最近有所使用,结合了网上的一些用法和官方文档的介绍,在在这里总结一下最简单的esaypoi导入Excel的实现,网上很多教程都已经封装了工具类,虽然方便,但第一次接触easypoi可能看的不是清晰,现在总结一下最为直观的SpringBoot集成easypoi快速入门.
快速入门:
一.导入jar包
由于是springboot项目,通常集成一个工具或者插件,只需要导入xxx-starter,easypoi也提供了相应的启动包
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
如果不导这个启动包导入以下三个包也是可以的
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.0.3</version>
</dependency>
二.定义实体类
这个很好理解就是将Excel中的值对应到java的程序中,这个和我们使用Mybatis框架,将数据库中的数据映射到java程序中是一样的.
这里在进行映射的时候,属性要加上注解,告诉easypoi哪个是我希望映射的
作为快速入门,这里只简单的介绍@Excel这个核心注解,并只介绍一对一的情况,具体情况可以参考官方文档.官方文档
下面的表是@Excel的属性,看着很多实际上只需要简单的几个就可以满足需求,并不一定需要这么多的属性,大家冷静,easypoi是很简单的,名字都叫easy了
属性 | 类型 | 默认值 | 功能 |
---|---|---|---|
name |
String |
null |
列名,支持name_id |
needMerge |
boolean |
fasle |
是否需要纵向合并单元格(用于含有list中,单个的单元格,合并list创建的多个row) |
orderNum |
String |
"0" |
列的排序,支持name_id |
replace |
String[] |
{} |
值得替换 导出是{a_id,b_id} 导入反过来 |
savePath |
String |
"upload" |
导入文件保存路径,如果是图片可以填写,默认是upload/className/ IconEntity这个类对应的就是upload/Icon/ |
type |
int |
1 |
导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本 |
width |
double |
10 |
列宽 |
height |
double |
10 |
列高,后期打算统一使用@ExcelTarget的height,这个会被废弃,注意 |
isStatistics |
boolean |
fasle |
自动统计数据,在追加一行统计,把所有数据都和输出 这个处理会吞没异常,请注意这一点 |
isHyperlink |
boolean |
false |
超链接,如果是需要实现接口返回对象 |
isImportField |
boolean |
true |
校验字段,看看这个字段是不是导入的Excel中有,如果没有说明是错误的Excel,读取失败,支持name_id |
exportFormat |
String |
"" |
导出的时间格式,以这个是否为空来判断是否需要格式化日期 |
importFormat |
String |
"" |
导入的时间格式,以这个是否为空来判断是否需要格式化日期 |
format |
String |
"" |
时间格式,相当于同时设置了exportFormat 和 importFormat |
databaseFormat |
String |
"yyyyMMddHHmmss" |
导出时间设置,如果字段是Date类型则不需要设置 数据库如果是string 类型,这个需要设置这个数据库格式,用以转换时间格式输出 |
numFormat |
String |
"" |
数字格式化,参数是Pattern,使用的对象是DecimalFormat |
imageType |
int |
1 |
导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的 |
suffix |
String |
"" |
文字后缀,如% 90 变成90% |
isWrap |
boolean |
true |
是否换行 即支持\n |
mergeRely |
int[] |
{} |
合并单元格依赖关系,比如第二列合并是基于第一列 则{0}就可以了 |
mergeVertical |
boolean |
fasle |
纵向合并内容相同的单元格 |
fixedIndex |
int |
-1 |
对应excel的列,忽略名字 |
isColumnHidden |
boolean |
false |
导出隐藏列 |
这个@Excel注解是我们导入和导出的核心注解,导入导出都使用它.
下面结合实体类来接介绍用法
public class UserPo implements Serializable {
// name 属性对应Excel表中的这一列的名字,和Mysql数据里的列名差不多
@Excel(name = "id")
private Integer id;
@Excel(name = "openid")
private String openid;
@Excel(name = "nickname")
private String nickname;
// replace这个属性,是指定替换的值,如果Excel表中是1,那么封装进来就是男,中间的分隔符是下划线
@Excel(name = "sex" , replace = {"1_男" , "2_女" , "0_未知"})
private String sex;
@Excel(name = "city")
private String city;
@Excel(name = "country")
private String country;
// 省略getset方法
}
这里介绍两个重点的属性:
name:对应Excel表中的这一列的名字,和Mysql数据里的列名差不多
replace:指定替换的值,如果Excel表中是1,那么封装进来就是男,中间的分隔符是下划线
非常的简单.到此实体类就定义好了
三.编写Servlet导入数据
在这里我们只要写一个接受文件上传的方法就好了,当然这个文件要是Excel的文件,我们读取数据的时候并不需要将文件读取并写到服务器的目录下,只是单纯的读取文件,然后使用easypoi的工具去读取就可以,注意这个工具只是将Excel表中的数据读入内存.
@PostMapping("xlsUpdate")
@ResponseBody
public Result getUpdate(MultipartFile file) throws Exception {
// 这里实例导入的对象
ImportParams params = new ImportParams();
// 下面两句的set很重要,如果设置不对会出现问题
// HeadRows是指的你的列名的那一行,表头行数,默认1
// 如果你的Excel表上来第一行就是 姓名 , 年龄 , 罩杯...
// 那么这里指定HeadRows是第一行,为1
params.setHeadRows(1);
// 表格标题行数,默认0
// 意思就是如果你的表上来就是 xx地区胸部大小统计表
// 那这里就是你表的标题占的行数
params.setTitleRows(0);
// 后面的这个方法是固定的
// 返回读取列的数组 这里的输入流直接MultipartFile的输入流
List<UserPo> result = ExcelImportUtil.importExcel(file.getInputStream(),
// 实体类的class 实例的导入对象
UserPo.class, params);
// 以上方法可以获得Excel表中的值,并且封装了实体类对象,下面有了实体类对象,那我们想干啥
// 就干啥了
//*********************************************
userService.insertUserList(result);
Result r = new Result();
r.setMsg("0000");
return r;
}
这里使用的接受上传文件的方法和MultipartFile类是SpringBoot提供好的,Spring这个框架还是6啊
前台当然也要写一个文件上传的表单.这个就不演式了
四:编写Servlet导出数据
导出数据的时候是将你内存中的数据导入到一个Excel表中,正常是前台一个按钮,点击会下载Excel表
导出时的实体类也需要@Excel注解,并且可以使用一些属性定义要下载的表的行高列宽等属性,详情见上面的表格.并且也可以使用replace属性,指定替换某些值
// 不知道为啥这段代码不高亮,很尴尬,大家凑合着看
@GetMapping("downLoad")
public void downLoad(HttpServletResponse resp) throws IOException {
// 获取你的实体类list集合
List<UserEx> list = userService.listUserEx();
// 创建Workbook这个对象
// 第一个参数是一个ExportParams对象,这里直接new,
// ExportParams对象里面的第一个参数是你自己定义的表的名字
// ExportParams对象里面的第二个参数是你自己定义Excel中Sheet的名字
// 第二个参数是实体类的class 第三个是你封装的集合
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户表", "用户详
情") ,UserEx.class , list);
// 设置下载的头信息 使用URLEncoder.encode是为了解决编码问题
resp.setHeader("Content-Disposition" , "attachment;filename=" +
URLEncoder.encode("用户表.xls" , "utf-8"));
ServletOutputStream os = resp.getOutputStream();
// 用workbook对象直接写出输出流就可以
workbook.write(os);
}
至此就简单的完成了easypoi的简单的导入导出,大家可以参考尝试一下,确实使用很简单
上一篇: 同一个mysql数据库,不同的服务器连接,速度不同
下一篇: 用数组写一个杨辉三角
推荐阅读
-
SpringBoot中使用POI,快速实现Excel导入导出
-
springboot+easypoi搞定Excel导入导出
-
SpringBoot集成easypoi快速入门(Excel导入导出工具)
-
SpringBoot集成EasyPoi实现Excel导入导出
-
【springboot+easypoi】一行代码搞定excel导入导出
-
Springboot2整合easypoi实现导入导出、OSS图片导出到Excel
-
【springboot+easypoi】一行代码搞定excel导入导出
-
SpringBoot+EasyPOI实现快速excel导入导出
-
Springboot+Easypoi 实现excel导入导出---快速入门
-
springboot整合EasyPOI实现Excel导入导出