diff --git a/src/Luban.Job.Cfg/Source/DataCreators/ExcelDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/ExcelDataCreator.cs index 9d45984..0276aae 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/ExcelDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/ExcelDataCreator.cs @@ -44,16 +44,17 @@ namespace Luban.Job.Cfg.DataCreators private bool CheckNull(bool nullable, object o) { - if (o is string s && s == "null") + return nullable && (o == null || (o is string s && s == "null")); + } + + private bool CheckIsDefault(bool namedMode, object value) + { + if (namedMode) { - if (nullable) + if (value == null || (value is string s && string.IsNullOrEmpty(s))) { return true; } - else - { - throw new InvalidExcelDataException($"单元格没有填有效数据"); - } } return false; } @@ -75,18 +76,6 @@ namespace Luban.Job.Cfg.DataCreators } } - private bool CheckIsDefault(bool namedMode, object value) - { - if (namedMode) - { - if (value == null || (value is string s && string.IsNullOrEmpty(s))) - { - return true; - } - } - return false; - } - public DType Accept(TBool type, object converter, ExcelStream x, DefAssembly ass) { if (x.NamedMode && x.IncludeNullAndEmptySize != 1) @@ -338,7 +327,11 @@ namespace Luban.Job.Cfg.DataCreators public DType Accept(TEnum type, object converter, ExcelStream x, DefAssembly ass) { - var d = x.Read(); + var d = x.Read(x.NamedMode); + if (CheckNull(type.IsNullable, d)) + { + return null; + } if (CheckNull(type.IsNullable, d)) { return null; @@ -541,31 +534,55 @@ namespace Luban.Job.Cfg.DataCreators public DType Accept(TVector2 type, object converter, ExcelStream x, DefAssembly ass) { - var d = x.Read(); + if (x.NamedMode && x.IncludeNullAndEmptySize != 1) + { + throw new InvalidExcelDataException("在标题头对应模式下必须正好占据1个单元格"); + } + var d = x.Read(x.NamedMode); if (CheckNull(type.IsNullable, d)) { return null; } + if (CheckIsDefault(x.NamedMode, d)) + { + return DVector2.Default; + } return DataUtil.CreateVector(type, d.ToString()); } public DType Accept(TVector3 type, object converter, ExcelStream x, DefAssembly ass) { - var d = x.Read(); + if (x.NamedMode && x.IncludeNullAndEmptySize != 1) + { + throw new InvalidExcelDataException("在标题头对应模式下必须正好占据1个单元格"); + } + var d = x.Read(x.NamedMode); if (CheckNull(type.IsNullable, d)) { return null; } + if (CheckIsDefault(x.NamedMode, d)) + { + return DVector3.Default; + } return DataUtil.CreateVector(type, d.ToString()); } public DType Accept(TVector4 type, object converter, ExcelStream x, DefAssembly ass) { - var d = x.Read(); + if (x.NamedMode && x.IncludeNullAndEmptySize != 1) + { + throw new InvalidExcelDataException("在标题头对应模式下必须正好占据1个单元格"); + } + var d = x.Read(x.NamedMode); if (CheckNull(type.IsNullable, d)) { return null; } + if (CheckIsDefault(x.NamedMode, d)) + { + return DVector4.Default; + } return DataUtil.CreateVector(type, d.ToString()); } diff --git a/src/Luban.Job.Cfg/Source/DataCreators/ExcelNamedRowDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/ExcelNamedRowDataCreator.cs index dcd15e2..a7ac77f 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/ExcelNamedRowDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/ExcelNamedRowDataCreator.cs @@ -120,14 +120,6 @@ namespace Luban.Job.Cfg.DataCreators try { list.Add(f.CType.Apply(this, row.GetSubTitleNamedRow(fname), f.IsMultiRow, f.IsNullable)); - //if (f.IsMultiRow) - //{ - // list.Add(f.CType.Apply(this, row.GetSubTitleNamedRowOfMultiRows(fname), f.IsMultiRow, f.IsNullable)); - //} - //else - //{ - // list.Add(f.CType.Apply(this, row.GetSubTitleNamedRow(fname), f.IsMultiRow /* 肯定是 false */, f.IsNullable)); - //} } catch (DataCreateException dce) { diff --git a/src/Luban.Job.Cfg/Source/Datas/DVector2.cs b/src/Luban.Job.Cfg/Source/Datas/DVector2.cs index 993422d..2ae5085 100644 --- a/src/Luban.Job.Cfg/Source/Datas/DVector2.cs +++ b/src/Luban.Job.Cfg/Source/Datas/DVector2.cs @@ -5,6 +5,8 @@ namespace Luban.Job.Cfg.Datas { public class DVector2 : DType { + public static DVector2 Default { get; } = new DVector2(default); + public DVector2(Vector2 x) : base(x) { } diff --git a/src/Luban.Job.Cfg/Source/Datas/DVector3.cs b/src/Luban.Job.Cfg/Source/Datas/DVector3.cs index 4d34b38..86f202a 100644 --- a/src/Luban.Job.Cfg/Source/Datas/DVector3.cs +++ b/src/Luban.Job.Cfg/Source/Datas/DVector3.cs @@ -5,6 +5,8 @@ namespace Luban.Job.Cfg.Datas { public class DVector3 : DType { + public static DVector3 Default { get; } = new DVector3(default); + public DVector3(Vector3 x) : base(x) { } diff --git a/src/Luban.Job.Cfg/Source/Datas/DVector4.cs b/src/Luban.Job.Cfg/Source/Datas/DVector4.cs index b5182ed..5786f1a 100644 --- a/src/Luban.Job.Cfg/Source/Datas/DVector4.cs +++ b/src/Luban.Job.Cfg/Source/Datas/DVector4.cs @@ -5,6 +5,8 @@ namespace Luban.Job.Cfg.Datas { public class DVector4 : DType { + public static DVector4 Default { get; } = new DVector4(default); + public DVector4(Vector4 x) : base(x) { } diff --git a/src/Luban.Job.Cfg/Source/TypeVisitors/IsMultiData.cs b/src/Luban.Job.Cfg/Source/TypeVisitors/IsMultiData.cs index f69c65a..df842ef 100644 --- a/src/Luban.Job.Cfg/Source/TypeVisitors/IsMultiData.cs +++ b/src/Luban.Job.Cfg/Source/TypeVisitors/IsMultiData.cs @@ -40,17 +40,17 @@ namespace Luban.Job.Cfg.TypeVisitors public override bool Accept(TVector2 type) { - return true; + return false; } public override bool Accept(TVector3 type) { - return true; + return false; } public override bool Accept(TVector4 type) { - return true; + return false; } } }