这里会介绍最基本的一个实现具体的导入导出的demo
比较高级的定制样式什么的在其他推文会写
在正式敲代码之前先做一下准备工作,先把实体类还有依赖引入
Student实体类,注释基本都有注解,如果不懂的可以去查一下easyexcel的文档
@Data
@ColumnWidth(20)
//@HeadRowHeight() //表头行高
//@ContentRowHeight() //内容行高
public class Student {
/**
* 名字
*/
@ExcelProperty("姓名")
private String name;
/**
* 性别
*/
@ExcelProperty(value = "姓别",index = 2) //index用来指定导出的表头所处顺序 是从0开始算的 默认是按照类的属性的顺序导出 推荐不要一起用
private String gender;
/**
* 生日
*/
@ExcelProperty("出生日期")//设置表头名字
@ColumnWidth(20)//属性和列上都可以使用
@DateTimeFormat("yyyy-MM-dd")//格式参照java.text.SimpleDatFormat
private Date birthday;
/**
* id
*/
@ExcelProperty("ID")
@ExcelIgnore//忽略,不导出
private String id;
}
引入依赖,pom.xml文件
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
<!--easyexcel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.0</version>
</dependency>
<!--juit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
在正式敲代码之前需要先了解两个概念
1. 工作簿:指的是一整个excel文件
2. 工作表:指的是这个excel文件里面的每个sheet
接下来就可以正式的实现有关于导入导出的功能了
首先是导出功能
我把需要导出的文件放到了项目当中,结构如下,里面的easyExcel练习,xlsx
文件内容如下
代码实现如下
@Test
public void test01(){
/*
* 第一个参数:要读的文件的路径
* 第二个参数:文件中的每一行数据要存储到的实体的类
* 第三个参数:读监听器,每读一行内容,都会调用一次该对象的invoke方法,
* 在invoke方法中可以操作使用读取到的数据
* */
//获取一个工作簿对象
ExcelReaderBuilder readWorkBook =
EasyExcel.read("easyExcel练习.xlsx", Student.class, new StudentListener());
//获取一个工作表对象
ExcelReaderSheetBuilder sheet = readWorkBook.sheet();
//获取内容
sheet.doRead();
}
监听器实现如下,只是简单的实现输出
public class StudentListener extends AnalysisEventListener<Student> {
/**
* 每读一行内容,都会调用一次invoke,在invoke中可以操作使用读取到的数据
* @param student 学生
* @param analysisContext 分析上下文
*/
@Override
public void invoke(Student student, AnalysisContext analysisContext) {
System.out.println("student = " + student);
}
/**
* 读取完整个文档之后调用的方法
*
* @param analysisContext 分析上下文
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
运行的结果如下
成功读出了,但是因为我的Students实体类中有birthday和id字段,但是我在这个excel中并没有填写,所以读出的是null,这里注意表格的属性要和实体类的对好,要不然读不了
接下来是导出功能,代码实现如下
@Test
public void test02(){
/*
* 构建一个写的工作簿对象
* 第一个参数:要写入的文件路径
* 第二个参数:封装写入的数据的实体的类型
* 返回:写的工作簿对象
* */
//工作簿对象
ExcelWriterBuilder writeWorkBook =
EasyExcel.write("easyExcel练习--write.xlsx", Student.class);
//工作表对象
ExcelWriterSheetBuilder sheet = writeWorkBook.sheet();
//准备数据
List<Student> students = initData();
//写
sheet.doWrite(students);
System.out.println("导出成功");
}
private static List<Student> initData(){
ArrayList<Student> students = new ArrayList<Student>();
Student data = new Student();
for (int i = 0; i<10; i++){
data.setName("学生名字" + i);
data.setBirthday(new Date());
data.setGender("男");
students.add(data);
}
return students;
}
后面的initData方法是用来造假数据的,然后参数都有注解,不懂的可以留言或者查官方文档
导出效果如下