说到导出Excel文档,我们一般会想到很多放方式,比如简单的EasyPoi,采用注解的方式,直接导出,使用template模板方式,然后将数据写入模板,将数据转换成Map或是List集合写入Excel。方式很多,今天主要给大家分享下多sheet页多合并策略导出Excel文档。
一、正常导出方式
①使用ExcelWriter将策略定义好
复制代码
1
2
3
4
5
6
7ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) .registerWriteHandler(setHorizontalCellStyleStrategy()) .registerWriteHandler(new MergeStrategy("月度总览",5,Arrays.asList(0,1,2,3,4,5))) .excelType(ExcelTypeEnum.XLSX).build();
②创建sheet页
复制代码
1WriteSheet sheet1 = EasyExcel.writerSheet(0,"月度总览").build();
③在sheet页中添加列头信息
复制代码
1
2
3sheet1.setNeedHead(Boolean.TRUE); sheet1.setHead(head);
④将数据以及sheet页写入工作簿
复制代码
1excelWriter.write(list1, sheet1);
⑤关闭流
复制代码
1excelWriter.write(list3, sheet3);
二、多sheet页导出
如果是多sheet页,重复“一”中的2,3,4部分,创建sheet页,添加列头信息,写入工作簿
三、不同合并策略
需要重写AbstractMergeStrategy这个类的merge方法,定义自己要merge的方式
比如,通过sheet名称区分合并策略,定义几行合并一次,这个参数是之前就有的,合并哪几列,创建一个list,即:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85package com.huazhu.spm.labour.common.utils; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.merge.AbstractMergeStrategy; import java.util.List; import lombok.AllArgsConstructor; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; @AllArgsConstructor public class MergeStrategyextends AbstractMergeStrategy { private StringsheetName; private int eachRow; private ListcolumnIndexList; /** * merge * * @param sheet * @param cell * @param head * @param relativeRowIndex */ @Override protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) { if (!sheet.getSheetName().equals(sheetName)) { return; } if (relativeRowIndex ==null) { return; } Integer currentColumnIndex; if (head !=null) { currentColumnIndex = head.getColumnIndex(); }else { currentColumnIndex = cell.getColumnIndex(); } if (columnIndexList.contains(currentColumnIndex) && relativeRowIndex %eachRow ==0) { CellRangeAddress cellRangeAddress =new CellRangeAddress(cell.getRowIndex(), cell.getRowIndex() +eachRow -1, cell.getColumnIndex(), cell.getColumnIndex() ); sheet.addMergedRegionUnsafe(cellRangeAddress); } } }
在使用的时候,注册多个策略,传入对应的值,即可实现多sheet页不同合并方式的Excel导出
复制代码
1
2
3
4
5
6
7
8
9
10
11ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) .registerWriteHandler(setHorizontalCellStyleStrategy()) .registerWriteHandler(new MergeStrategy("月度总览",5,Arrays.asList(0,1,2,3,4,5))) .registerWriteHandler(new MergeStrategy("出勤状态",3,Arrays.asList(0,1,2,3,4,5))) .registerWriteHandler(new MergeStrategy("出勤记录",3,Arrays.asList(0,1,2,3,4,5))) .excelType(ExcelTypeEnum.XLSX).build();
如有错误,请讨论,谢谢
最后
以上就是纯真外套最近收集整理的关于AliEasyExcel 多sheet不同合并策略实现方式的全部内容,更多相关AliEasyExcel内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复