C# 根据Excel生成树

时间:2021-02-04 07:03:11

需求:

  根据Excel生成树,Excel的某些节点为属性节点,

  如: 列(桩号、构件编码、测试属性1) 是列(分项工程名称) 的属性,非节点。

  列(桩号、构件编码、测试属性1) 以属性的方式存在

导入的思路:

  排除属性列外,所有的列从左到右,树的层级依次递增,左边列是右边列的父节点

  判断一个单元格是否已添加,获取该单元格的所有父节点的名称,拼接成字符串。

    如:鸡鸣隧道  的全名就是  城开高速公路,B2合同段,鸡鸣隧道

效率的优化:

    C# 根据Excel生成树

  1、导入第二行(或后面行)的时候,判断和第一行是否有相同的节点,有就跳过相同节点,从不同的节点处开始导入。

  2、在效率低下的方法处 加上缓存

   3、导入A1合同段,就只加载A1合同段,这颗树的全部节点

树的一二级节点固定的

C# 根据Excel生成树

树的类:

    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格式:

C# 根据Excel生成树

生成的树:

C# 根据Excel生成树

数据库:

C# 根据Excel生成树