- 针对树形结构数据的Excel导出的
- 1 需求
- 1 对象结构
- 2 对数据进行树形结构数据组合并且进行计算工具类
- 3 对数据库的数据进行处理(==全文最重要的数据处理方法思路逻辑==)
- 4 递归查询 父节点信息
- 5 对数据写入Excel,
- 6 自动合并代码参考我的上一篇文章有详细的代码
针对树形结构的数据进行Excel导出并对数据进行合并单元格的操作1 对象结构
import java.util.ArrayList;
import java.util.List;
@Data
public class ElectricTechnologyTest extends baseEntity {
private String name;
private String parentId;
private String serialNumber;
private String deptName;
private String roomTypeName;
private Integer isLast;
private Integer level;
private Integer orderNumber;
private String updateUserName;
private String professionId;
private String professName;
private List children = new ArrayList();
}
2 对数据进行树形结构数据组合并且进行计算工具类
1 获取数据
List3 对数据库的数据进行处理(全文最重要的数据处理方法思路逻辑)collect = this.list().stream().map(v -> { ElectricTechnologyTest vo = new ElectricTechnologyTest(); BeanUtil.copyProperties(v, vo); return vo; }).collect(Collectors.toList());
3.1 计算出末级的数据,没有子集或者是lsLast = 1的数据,进行计算,在这个计算中,需要对合并好的数据进行计算处理
private static List4 递归查询 父节点信息ids = new ArrayList<>(); private static void getTheAfterTreatmentData(List list){ if (list!=null) { for (int i = 0; i < list.size(); i++) { ElectricTechnologyTest vo = list.get(i); List children = vo.getChildren(); //拿到最末级的数据的ID,然后需要对这些数据进行反推处理 if (!DevUtil.list(children)){ ids.add(vo.getId()); } electricTechnologyMapper.updateTheData(vo.getId(),vo.getSerialNumber()); getTheAfterTreatmentData(children); } } }
Map5 对数据写入Excel,collect = service.list().stream().collect(Collectors.toMap(ElectricTechnology::getId, v -> v)); public static String getParentName(String id,Map 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 ""; } }
List>
这样的数据需要进行二次遍历写入对应的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



