easypoi
easypoi是为了方便我们编写excel和word的模板导入和导出,是对poi的封装的一个工具类
(将Java中的对象作为excel表中一行一行记录导出)
easypoi 父包--作用大家都懂得
easypoi-annotation 基础注解包,作用与实体对象上,拆分后方便maven多工程的依赖管理
easypoi-base 导入导出的工具包,可以完成Excel导出,导入,Word的导出,Excel的导出功能
easypoi-web 耦合了spring-mvc 基于AbstractView,极大的简化spring-mvc下的导出功能
sax 导入使用xercesImpl这个包(这个包可能造成奇怪的问题哈),word导出使用poi-scratchpad,都作为可选包了
导出
1.导入pom依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
注解介绍
easypoi起因就是Excel的导入导出,最初的模板是实体和Excel的对应,model--row,filed--col 这样利用注解我们可以和容易做到excel到导入导出 经过一段时间发展,现在注解有5个类分别是
@Excel 作用到filed上面,是对Excel一列的一个描述
- 用在filed(属性)上面,是对Excel一列的一个描述
- 常用属性:
name : [String][生成Excel表格中列名]
needMerge: [boolean][是否需要纵向合并单元格(用于含有list中,单个的单元格,合并list创建的多个row)]
orderNum : [String][指定生成Excel中列的顺序,按照数字自然顺序排序]
savePath : [String][指定导入Excel中图片的保存路径]
type : [String][导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本]
width : [Double][指定导出Excel时列的宽度]
isImportField: [boolean][是否是导入字段,如果没有说明是错误的Excel]
exportFormat: [String][导出Excel的时间格式]
importFormat: [String][导入Excel的时间格式]
format : [String][相当于同时设置了exportFormat和importFormat]
imageType: [int][导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的]
suffix : [String][文字后缀,如% 90 变成90%]
@ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示
- 一对多的集合注解,用以标记集合是否被数据以及集合的整体排序
- 常用属性:
name : [String][定义集合列名]
orderNum: [int][用来指定导出excel集合内列的顺序]
type : [Class\<?>][用来指定导出是创建对象类型]
@ExcelEntity 表示一个继续深入导出的实体,但他没有太多的实际意义,只是告诉系统这个对象里面同样有导出的字段
- 标记是不是导出excel 标记为实体类,一遍是一个内部属性类,标记是否继续穿透
- 常用属性:
name: [String][定义唯一标识]
@ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导导出
# 1.说明
- 用在属性上,导出Excel时忽略这个属性
@ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导出做出不同处理
- 用在实体类上标识是一个可以通过EasyPOI导入导出的实体类
- 相关属性:
value: [String][定义id唯一标识,不能重复] `常用`
height: [Double][定义单元格高度]
fontSize: [short ][定义单元格字体大小]
User.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@ExcelTarget("user1")//这个是标识这个对象,里面的值没有影响
public class User implements Serializable {
@Excel(name = "编号")
private String id;
@Excel(name = "姓名",width = 10)
private String name;
@Excel(name = "年龄",replace = {"10岁_10","11岁_11"})
private Integer age;
@Excel(name = "生日",exportFormat = "yyyy-MM-dd",width = 16)
private Date bir;
}
Testpoi.java
public class Testpoi {
public List<User> getUsers(){
List<User> users = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(String.valueOf(i));
user.setName("小余"+i);
user.setAge(5+i);
user.setBir(new Date());
users.add(user);
}
return users;
}
@Test
public void testExport() throws IOException {
//获取数据
List<User> users = getUsers();
//导出excel
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户信息列表", "用户信息"), User.class, users);
//将excel写入指定位置
FileOutputStream outputStream = new FileOutputStream("C:/Users/MSI-PC/Desktop/aa.xls");
workbook.write(outputStream);
outputStream.close();
workbook.close();
}
}
这个代码中都只是展示了一部分属性的用法,在学习中我们可以去举一反三来提高学习效率。
导入
public void testImport() throws Exception {
ImportParams params = new ImportParams();
params.setTitleRows(1);//标题占的行数
params.setHeadRows(1);//header占的行数
List<Object> excel = ExcelImportUtil.importExcel(new FileInputStream("C:/Users/MSI-PC/Desktop/aa.xls"), User.class, params);
excel.forEach(System.out::println);
}