针对树形结构数据进行Excel导出并进行合并处理
- 针对树形结构数据的Excel导出的
- 1 需求
- 1 对象结构
- 2 对数据进行树形结构数据组合并且进行计算工具类
- 3 对数据库的数据进行处理(==全文最重要的数据处理方法思路逻辑==)
- 4 递归查询 父节点信息
- 5 对数据写入Excel,
- 6 自动合并代码参考我的上一篇文章有详细的代码
针对树形结构数据的Excel导出的
1 需求
针对树形结构的数据进行Excel导出并对数据进行合并单元格的操作
1 对象结构
import java.util.ArrayList;
import java.util.List;/*** @Created by LXY* @Data: 2021/10/21 20:45* 机电第三个 :技术措施*/
@Data
public class ElectricTechnologyTest extends BaseEntity {/*** 名称*/private String name;/*** 父级的id*/private String parentId;/*** 序号*/private String serialNumber;private String deptName;private String roomTypeName;/*** 是否末级* 0 不是* 1 是*/private Integer isLast;/*** 层级*/private Integer level;/*** 排序*/private Integer orderNumber;/*** 更新人*/private String updateUserName;/*** 专业*/private String professionId;private String professName;/*** 子孙节点*/private List<ElectricTechnologyTest> children = new ArrayList<ElectricTechnologyTest>();}
2 对数据进行树形结构数据组合并且进行计算工具类
1 获取数据
List<ElectricTechnologyTest> collect = this.list().stream().map(v -> {ElectricTechnologyTest vo = new ElectricTechnologyTest();BeanUtil.copyProperties(v, vo);return vo;}).collect(Collectors.toList());
3 对数据库的数据进行处理(全文最重要的数据处理方法思路逻辑)
3.1 计算出末级的数据,没有子集或者是lsLast = 1的数据,进行计算,在这个计算中,需要对合并好的数据进行计算处理
private static List<String> ids = new ArrayList<>();/*** 递归对每个数据进行处理*/private static void getTheAfterTreatmentData(List<ElectricTechnologyTest> list){if (list!=null) {for (int i = 0; i < list.size(); i++) {ElectricTechnologyTest vo = list.get(i);List<ElectricTechnologyTest> children = vo.getChildren();//拿到最末级的数据的ID,然后需要对这些数据进行反推处理if (!DevUtil.list(children)){ids.add(vo.getId());}electricTechnologyMapper.updateTheData(vo.getId(),vo.getSerialNumber());getTheAfterTreatmentData(children);}}}
4 递归查询 父节点信息
/*** 递归查询父节点* 利用递归来从子节点信息查找父节点信息* 这里可以自己对数据进行处理,拿到自己想要的数据结构*/Map<String, ElectricTechnology> collect = service.list().stream().collect(Collectors.toMap(ElectricTechnology::getId, v -> v));public static String getParentName(String id,Map<String, ElectricTechnology> map) {ElectricTechnology entity = map.get(id);if (entity != null) {String configName = entity.getRemark() + "," + entity.getName() + ",";String returnConfigName = getParentName(entity.getParentId(),map);return returnConfigName + configName;} else {return "";}}
5 对数据写入Excel,
List<List<String>>
这样的数据需要进行二次遍历写入对应的Excel,然后对数据进行合并操作就可以达成自己想要的树形结构数据导出Excel自动合并同级相同内容的操作。
for (int i = 0; i < lists.size(); i++) {SXSSFRow row0 = sheet.createRow(i);for (int k = 0; k < lists.get(i).size(); k++) {SXSSFCell cell = row0.createCell(k);cell.setCellValue(lists.get(i).get(k));cell.setCellStyle(style);}}/*** 合并操作*/for (int i = 0; i < lists.get(0).size(); i++) {OfficeUtil.toMergeTheStand(sheet,style,0,i);}
6 自动合并代码参考我的上一篇文章有详细的代码
效果
自动合并改列的数据文章链接
最后感谢各位观看 也可以多多交流QQ 954248544