コード例 #1
0
 // 由于先处理merge再处理只占一列的标题头.
 // sub titles 未必是有序的。对于大多数数据并无影响
 // 但对于 list类型的多级标题头,有可能导致element 数据次序乱了
 private void SortSubTitles()
 {
     SubTitleList.Sort((t1, t2) => t1.FromIndex - t2.FromIndex);
     foreach (var t in SubTitleList)
     {
         t.SortSubTitles();
     }
 }
コード例 #2
0
 public void AddSubTitle(Title title)
 {
     if (!SubTitles.TryAdd(title.Name, title))
     {
         throw new Exception($"列:{title.Name} 重复");
     }
     SubTitleList.Add(title);
 }
コード例 #3
0
        public void Init()
        {
            SortSubTitles();
            Sep = Tags.TryGetValue("sep", out var sep) ? sep : "";
            //if (Tags.ContainsKey("sep"))
            //{
            //    throw new Exception($"字段名现在不支持sep,请移到##type行,例如'int&sep=;'");
            //}
            NonEmpty      = Tags.TryGetValue("non_empty", out var ne) && ne == "1";
            SelfMultiRows = Tags.TryGetValue("multi_rows", out var v2) && (v2 == "1" || v2 == "true");
            Default       = Tags.TryGetValue("default", out var v3) ? v3 : null;

            foreach (var(key, value) in Tags)
            {
                if (!s_validTags.Contains(key))
                {
                    throw new Exception($"excel标题列:'{Name}' 不支持tag:'{key}',请移到##type行");
                }
            }

            if (SubTitleList.Count > 0)
            {
                if (Root)
                {
                    var firstField = SubTitleList.FirstOrDefault(f => DefUtil.IsNormalFieldName(f.Name));
                    if (firstField != null)
                    {
                        // 第一个字段一般为key,为了避免失误将空单元格当作key=0的数据,默认非空
                        firstField.Tags.TryAdd("non_empty", "1");
                    }
                }
                foreach (var sub in SubTitleList)
                {
                    sub.Init();
                }
            }
            SubHierarchyMultiRows = SubTitleList.Any(t => t.HierarchyMultiRows);;
            HierarchyMultiRows    = SelfMultiRows || SubHierarchyMultiRows;
        }