java使⽤easyExcel读写excel
前⾔
相信现在很多搞后端的同学⼤部分做的都是后台管理系统,那么管理系统就肯定免不了 Excel 的导出导⼊功能,今天我们就来介绍⼀
下 Java 如何实现 Excel 的导⼊导出功能。
Java领域解析,⽣成Excel⽐较有名的框架有Apache poi,Jxl等,但他们都存在⼀个严重的问题就是⾮常的耗内存,如果你的系统并发量不⼤的话可能还⾏,但是⼀旦并发上来后⼀定会OOM或者JVM频繁的full gc.
EasyExcel是阿⾥巴巴开源的⼀个excel处理框架,以使⽤简单,节省内存著称,今天我们来使⽤阿⾥巴巴开源的EasyExcel框架来实
现Excel的导⼊导出功能。
官⽅⽂档:
本⽂主要有以下⼏个知识点:
从Excel读取数据
导出数据到Excel
Excel模板填充
正⽂
⾸先第⼀步得先导⼊EasyExcel的Jar包
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>easyexcel</artifactId>
  <version>2.2.4</version>
</dependency>
<!--xls-->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.17</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.17</version>
</dependency>
导出数据到Excel.
接下来看看如何导出数据到到Excel中,有两种写法,⼀种是不创建对象的写⼊,另⼀种是根据对象写⼊。
- 不创建对象的写⼊
@SpringBootTest
class Tests {
/*
* 不创建对象的写
*/
@Test
public void test() {
// ⽣成Excel路径
String fileName = "C:\\Users\\likun\\Desktop\\测试.xlsx";
EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList());    }
private List<List<String>> head() {
List<List<String>> list = new ArrayList<>();
List<String> head0 = new ArrayList<>();
head0.add("姓名");
List<String> head1 = new ArrayList<>();
head1.add("年龄");
List<String> head2 = new ArrayList<>();
head2.add("⽣⽇");
list.add(head0);
list.add(head1);
list.add(head2);
return list;
}
private List<List<Object>> dataList() {
List<List<Object>> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
List<Object> data = new ArrayList<>();
data.add("张三");
data.add(25);
data.add(new Date());
list.add(data);
}
return list;
}
}
代码很简单,核⼼就⼀句代码:
EasyExcel.write(fileName).head(head()).sheet("模板").doWrite(dataList()); head()⽤来放表头数据,dataList()⽤来放每⼀⾏的数据。
看下效果图:
如果想设置⾃动列宽可以这样⼦:
EasyExcel.write(fileName).head(head()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())        .sheet("模板").doWrite(dataList());
效果图:
- 根据对象写⼊
接下来是根据对象导⼊Excel,⾸先我们要定义⼀个对象:
@Data
public class User {
@ExcelProperty("姓名")
private String name;
@ExcelProperty("性别")
private String sex;
@ExcelProperty("年龄")
private Integer age;
@ExcelProperty("⾝份证")
private String cardid;
}
使⽤@ExcelProperty注解来指定标题名称
@SpringBootTest
class Tests {
@Test
public void test() {
// ⽣成Excel路径
String fileName = "C:\\Users\\likun\\Desktop\\测试.xlsx";
EasyExcel.write(fileName, User.class).sheet("模板").doWrite(data());
}
private List<User> data() {
List<User> userList = new ArrayList<>();
User user;
for (int i = 1; i <= 10; i++) {
user = new User();
user.setName("张三" + i);
user.setSex("男");
user.setAge(i);
user.setCardid("440582xxxx");
userList.add(user);
}
return userList;
}
}
使⽤对象导出数据也是很简单,只要doWrite⽅法传⼊我们的对象集合就可以了。
效果图:
忽略字段
如果对象⾥⾯有些字段我们并不想导出到Excel中,只要使⽤@ExcelIgnore注解就可以了:
/*
validation框架忽略这个字段
*/
@ExcelIgnore
private String filed;
写⼊指定的列
如果我们想导出数据到指定的列中该如何设置呢?
@Data
public class User {
@ExcelProperty(value = "姓名", index = 0)
private String name;
@ExcelProperty(value = "性别", index = 1)
private String sex;
@ExcelProperty(value = "年龄", index = 2)
private Integer age;
@ExcelProperty(value = "⾝份证", index = 4)
private String cardid;
}
@ExcelProperty的index可以指定导出的列索引,来看下效果图:
复杂头写⼊
很多时候Excel⾥会有很多复杂的表头,那么如何实现呢?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。