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; }
    }
View Code

Excel格式:

生成的树:

数据库:

原文地址:https://www.cnblogs.com/guxingy/p/10103547.html