poi比较占用内存。 easyexcel性能优化不少,值得一看。
excel工具不只一种,如poi(apache)、excelExcel(阿里)等。
做项目时根据已有框架,哪种都可能遇到,而导入多种excel依赖很容易冲突。最好在原种类上进行开发,所以每种都要会。
maven依赖
pom.xml中添加:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
功能部分
excel工具好几种,每种工具命名都不一样,所以从命名角度来记很容易串。
那么从功能角度来找方法,会好一些。
写
读
private static List<DemoData> data() {
List<DemoData> list = ListUtils.newArrayList();
for (int i = 0; i < 5; i++) {
DemoData data = new DemoData();
data.setString("字符串" + i);
data.setDate(new Date());
data.setDoubleData(0.56);
list.add(data);
}
return list;
}
自定义标题头(合并单元格等)
自定义标题头的方式不只一种。
list方式自定义标题头
做出list数据:
List<List<String>> generateHeadList(){
List<List<String>> headList = new ArrayList<List<String>>();
List<String> head_B = new ArrayList<String>();
head_B.add("曹魏");
head_B.add("曹魏");
// 三国
List<String> head_C = new ArrayList<String>();
head_C.add("蜀汉");
head_C.add("关羽");
List<String> head_D = new ArrayList<String>();
head_D.add("蜀汉");
head_D.add("张飞");
headList.add(head_B);
headList.add(head_C);
headList.add(head_D);
return headList;
}
设置head:
dataSheet.setHead(generateHeadList());
注解定义标题头
其实注解也是支持标题头的。 比list优雅多了。
代码:
@ExcelProperty(value = { "交通","公路" })
private String highWay;
@ExcelProperty(value = {"交通", "铁路" })
private String railWay;
value支持多个值,有几个表示几行。 如果值一样就会合并。
不要标题头
设置列宽
@ColumnWidth
注解即可。
代码:
@ExcelProperty(value = { "交通","公路" })
@ColumnWidth(27)
private String highWay;
填充(这里说的是根据模板填充,不是追加)
fill()方法是根据模板填充,别误以为追加啊。
略。
末尾加统计行
有时代码封装的程度太高,想要自定义就比较麻烦。
通常会有这样的需求,客户会要求在末尾添加一行统计行。
这就有点难受,因为easyExcel分页查询并写入,统计行肯定不在分页查询里。
这里可以转换下思路,在要写入的list最后添加一行。类还和标准的类一致,就是字段值设置为统计的文字和数值即可。
注:这样就不适合用分页了,因为不知道哪一次是最后一次查询。如果分页会每次都插入一个合计行,这样是不对的。
而且,合计值应该统计全部的,不应该统计当前页面的(界面能展示的行数太少了)。
注:如果涉及到参数转换,request参数类尽量用个新类,把属性复制过来再转换。
否则查询全部的时候,可能会再次转换参数报错。
例如 前端控件月份。 2024-05
纳税期月份。 202405
如果用一个request,再次查询的时候格式就不正确了。
那么合计值的计算有两个办法:
1、写个sql,进行全部计算。(如果计算规则不复杂,这种方式不错)
2、添加查询全部的代码,循环进行计算。(如果计算规则复杂,通过sql就不太好用,推荐查出来用java计算)
easyexcel 官方项目github地址:
https://github.com/alibaba/easyexcel
easyexcel 官网文档地址:
https://alibaba-easyexcel.github.io/