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); }
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(); }
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); }