我是靠谱客的博主 纯真外套,这篇文章主要介绍AliEasyExcel 多sheet不同合并策略实现方式,现在分享给大家,希望可以做个参考。

        说到导出Excel文档,我们一般会想到很多放方式,比如简单的EasyPoi,采用注解的方式,直接导出,使用template模板方式,然后将数据写入模板,将数据转换成Map或是List集合写入Excel。方式很多,今天主要给大家分享下多sheet页多合并策略导出Excel文档。

一、正常导出方式

①使用ExcelWriter将策略定义好

复制代码
1
2
3
4
5
6
7
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) .registerWriteHandler(setHorizontalCellStyleStrategy()) .registerWriteHandler(new MergeStrategy("月度总览",5,Arrays.asList(0,1,2,3,4,5))) .excelType(ExcelTypeEnum.XLSX).build();

②创建sheet页

复制代码
1
WriteSheet sheet1 = EasyExcel.writerSheet(0,"月度总览").build();

③在sheet页中添加列头信息

复制代码
1
2
3
sheet1.setNeedHead(Boolean.TRUE); sheet1.setHead(head);

④将数据以及sheet页写入工作簿

复制代码
1
excelWriter.write(list1, sheet1);

⑤关闭流

复制代码
1
excelWriter.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
85
package 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
11
ExcelWriter 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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(86)

评论列表共有 0 条评论

立即
投稿
返回
顶部