Beispiel #1
0
        private JObject ReadSheetData(IList <SheetFieldInfo> fields, ISheet sheet)
        {
            JObject json_main_obj = new JObject();
            JArray  json_arr      = new JArray();

            //从第四行开始读
            for (var i = 4; i <= sheet.LastRowNum; i++)
            {
                var row = sheet.GetRow(i);
                if (row == null)
                {
                    break;
                }

                var json_obj = new JObject();

                bool break_flag = false;
                foreach (var field in fields)
                {
                    var cell = row.GetCell(field.Index);
                    if (cell == null)
                    {
                        if (field.Key) //key空了,读到这里就停止
                        {
                            break_flag = true;
                            break;
                        }
                        else
                        {
                            //非key的是数据空了,使用默认值或者跳过
                            if (InsertDefaultValueIfNoData)
                            {
                                json_obj.Add(NekoUtil.GetDefaultValue(field.Name, field.Type, field.ArrayType));
                            }
                            else
                            {
                                continue;
                            }
                        }
                    }
                    else
                    {
                        json_obj.Add(NekoUtil.GetJsonProperty(field.Name, cell.ToString(), field.Type, field.ArrayType, SplitChar));
                    }
                }

                if (break_flag)
                {
                    break;
                }

                json_arr.Add(json_obj);
            }

            json_main_obj.Add(new JProperty(JsonRootNodeName, json_arr));

            return(json_main_obj);
        }
Beispiel #2
0
 public void GetDefaultJsonValueTest()
 {
     TestContext.WriteLine(NekoUtil.GetDefaultValue("test", Enums.FieldType.String, Enums.FieldType.String).ToString());
     TestContext.WriteLine(NekoUtil.GetDefaultValue("test", Enums.FieldType.Number, Enums.FieldType.String).ToString());
     TestContext.WriteLine(NekoUtil.GetDefaultValue("test", Enums.FieldType.Boolean, Enums.FieldType.String).ToString());
     TestContext.WriteLine(NekoUtil.GetDefaultValue("test", Enums.FieldType.Array, Enums.FieldType.String).ToString());
     TestContext.WriteLine(NekoUtil.GetDefaultValue("test", Enums.FieldType.Array, Enums.FieldType.Number).ToString());
     TestContext.WriteLine(NekoUtil.GetDefaultValue("test", Enums.FieldType.Array, Enums.FieldType.Boolean).ToString());
     Assert.Pass();
 }
Beispiel #3
0
        private IList <SheetFieldInfo> GetFieldInfos(ISheet sheet)
        {
            List <SheetFieldInfo> infos = new List <SheetFieldInfo>();

            var field_row = sheet.GetRow(2);
            var desc_row  = sheet.GetRow(3); //辅助描述行

            if (field_row == null)
            {
                return(null);
            }

            //遍历row
            for (var i = 0; i < field_row.Cells.Count; i++)
            {
                var cell = field_row.Cells[i];
                if (cell == null)
                {
                    continue;
                }
                var cell_str = cell.ToString();
                if (NekoUtil.ParseFieldStr(cell_str, out string name, out var Type, out var subType))
                {
                    var info = new SheetFieldInfo()
                    {
                        Index     = i,
                        Name      = name,
                        Type      = Type,
                        ArrayType = subType
                    };

                    //辅助描述行

                    if (desc_row == null)
                    {
                        infos.Add(info);
                        continue;
                    }

                    var d_cell = desc_row.GetCell(i);
                    if (d_cell == null)
                    {
                        infos.Add(info);
                        continue;
                    }

                    var d_cell_str = d_cell.ToString();
                    NekoUtil.ParseFieldDesc(d_cell_str, out bool key, out bool required);
                    info.Key      = key;
                    info.Required = required;
                    infos.Add(info);
                }
            }

            //如果没有声明主键,则第一个为主键
            if (infos.Count > 0)
            {
                if (!infos.Any(f => f.Key))
                {
                    infos.First().Key = true;
                }
            }

            return(infos);
        }