From 36be33dea85c85ae82b59ca3c65c4a6cb5d42ec7 Mon Sep 17 00:00:00 2001 From: walon Date: Wed, 25 Aug 2021 13:43:58 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91cfg=20?= =?UTF-8?q?=E4=BB=8Eexcel=E4=B8=AD=E8=AF=BB=E5=8F=96=E5=8F=AF=E7=A9=BA?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E5=80=BC=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E4=B8=BA=E7=A9=BA=EF=BC=8C=E5=88=99?= =?UTF-8?q?=E5=8F=96null=EF=BC=8C=E8=80=8C=E4=B8=8D=E6=98=AFfalse,0?= =?UTF-8?q?=E4=B9=8B=E7=B1=BB=E3=80=82=20=E3=80=90=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=91cfg=20excel=E6=A0=BC=E5=BC=8F=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=A9=BA=E5=8D=95=E5=85=83=E6=A0=BC=E8=A1=A8=E7=A4=BAvector{2,?= =?UTF-8?q?3,4}=E7=B1=BB=E5=9E=8B=E7=9A=84=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/DataCreators/ExcelDataCreator.cs | 61 ++++++++++++------- .../DataCreators/ExcelNamedRowDataCreator.cs | 8 --- src/Luban.Job.Cfg/Source/Datas/DVector2.cs | 2 + src/Luban.Job.Cfg/Source/Datas/DVector3.cs | 2 + src/Luban.Job.Cfg/Source/Datas/DVector4.cs | 2 + .../Source/TypeVisitors/IsMultiData.cs | 6 +- 6 files changed, 48 insertions(+), 33 deletions(-) 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; } } }