C# 根据Excel生成树
需求:
根据Excel生成树,Excel的某些节点为属性节点,
如: 列(桩号、构件编码、测试属性1) 是列(分项工程名称) 的属性,非节点。
列(桩号、构件编码、测试属性1) 以属性的方式存在
导入的思路:
排除属性列外,所有的列从左到右,树的层级依次递增,左边列是右边列的父节点
判断一个单元格是否已添加,获取该单元格的所有父节点的名称,拼接成字符串。
如:鸡鸣隧道 的全名就是 城开高速公路,B2合同段,鸡鸣隧道
效率的优化:
1、导入第二行(或后面行)的时候,判断和第一行是否有相同的节点,有就跳过相同节点,从不同的节点处开始导入。
2、在效率低下的方法处 加上缓存
3、导入A1合同段,就只加载A1合同段,这颗树的全部节点
树的一二级节点固定的
树的类:
public class tb_Projects { public int ProID { get; set; } public string ProjectName { get; set; } /// <summary> /// 编码 /// </summary> public string ProjectCode { get; set; } public int ParentId { get; set; } public int? NextId { get; set; } public int? ProjectOrder { get; set; } public int IsEnabled { get; set; } /// <summary> /// 业主单位id /// </summary> public int? OwnerId { get; set; } /// <summary> /// 施工单位ID /// </summary> public int? ConstructionId { get; set; } /// <summary> /// 监理单位id /// </summary> public int? SupervisionId { get; set; } /// <summary> /// 承包单位id /// </summary> public int? ContractId { get; set; } /// <summary> /// 第几级(即在树层次中第几级,根元素级次为1,以此类推) /// </summary> public int? Level { get; set; } /// <summary> /// 数量 /// </summary> public int? Quantity { get; set; } public int VersionIng { get; set; } /// <summary> /// 里程桩号 /// </summary> public string MileageNo { get; set; } /// <summary> /// 标准编码 /// </summary> public string ComponentCode { get; set; } /// <summary> /// 内部编码 /// </summary> public string NComponentCode { get; set; } /// <summary> /// 流程状态 /// </summary> public int TaskStatus { get; set; } public string FbxId { get; set; } /// <summary> /// 判断是否为单位工程 /// </summary> public int IsSubunit { get; set; } /// <summary> /// 所属标段 /// </summary> public string BiDSion { get; set; } }
Excel格式:
生成的树:
数据库: