构想

通用导出excel分为 树结构数据导出、常态数据导出两类
其中导出的样式分为多表头、自定义宽度、数据字典转换、单元格颜色样式等
先判断是否是树形结构数据,然后通过转义对象为map并通过比对其key以及baseExcel 对象中的field获取对应的hedarer中文来实现对应的表头,接着处理对应的数据(字典,日期等数据转换),包括处理树形结构的层级关系,添加对应的层次(L1,L2,L3….),最后获取的集合进行数据导出

实现方式

image.png
convert 代表是否是map形式的数据
当前的通用excel导出是必须将数据转为map对象,通过相对应的key值来处理对应的数据以及header 表头、
由于没有固定的模板,需要传一定的格式来进行数据处理
image.png
此处代码是判断是否是树状结构数据,如果是树状结构数据将其转为常态list集合(没有children)常态数据集合是按照树状顺序排列(treeutils中已经进行数据处理)
image.png
此处代码是对应的表头处理通过上述tree或者list 转的map对象的key值(由于key是英文需要将其转为中文表头)因此需要通过BaseExcel中ExcelFeid该对象中field以及header,field 值对应key从而提取对应header(中文)存储在image.png
ListLayoutField对象中(方便形成对应的中文表头)。

image.png
由于后续树形结构需要进行数据样式层级处理因此需要自动给转义map后的树形结构数据添加层级字段tempLevel,templeverStr,两个key,依次生成1,2,3,4…,L1,L2,L3,L4….方便单元格颜色样式渲染
image.png
EasyExcelUtils该对象是easyexcel 导出的核心工具
具体的可以参考官网的https://www.yuque.com/easyexcel
其中多表头的实现是与前端进行参数规范约束,前端需将合并的表头还原,比如
原:
{
field:’demo’,header:’测试’
children:[
{
field:’num’,header:’数量’
},field:’price’,header:’价格’
}
]
}
此格式将会在前端渲染为
测试
数量 价格
这样的形式
现在需要将其改为
现:
{
field:’num’,header:’测试/数量’
},
{
field:’price’,header:’测试/价格’
}
这样的参数传到后台
后台会对其进行数据处理
image.png
此处代码即是对应的表头处理
image.png
此处为重写表头宽度(不太精确)