diff --git a/src/Magicodes.ExporterAndImporter.Excel/Utility/ImportHelper.cs b/src/Magicodes.ExporterAndImporter.Excel/Utility/ImportHelper.cs index 7a7aebb8..32e8aecd 100644 --- a/src/Magicodes.ExporterAndImporter.Excel/Utility/ImportHelper.cs +++ b/src/Magicodes.ExporterAndImporter.Excel/Utility/ImportHelper.cs @@ -1251,6 +1251,12 @@ protected virtual void ParseData(ExcelPackage excelPackage) SetValue(cell, dataItem, propertyInfo, value); continue; } + // 如果是可空枚举,选中空白项传入"",处理成null,不然会出现SetValue会报错 + else if (propertyInfo.PropertyType.IsNullable() && propertyInfo.PropertyType.GetNullableUnderlyingType().IsEnum) + { + SetValue(cell,dataItem,propertyInfo,null); + continue; + } } if (propertyInfo.PropertyType.IsEnum diff --git a/src/Magicodes.ExporterAndImporter.Tests/ExcelImporter_Tests.cs b/src/Magicodes.ExporterAndImporter.Tests/ExcelImporter_Tests.cs index dc7110e7..77b23d55 100644 --- a/src/Magicodes.ExporterAndImporter.Tests/ExcelImporter_Tests.cs +++ b/src/Magicodes.ExporterAndImporter.Tests/ExcelImporter_Tests.cs @@ -1210,5 +1210,12 @@ public async Task Issue377_Test() import.HasError.ShouldBeFalse(); import.Data.Count.ShouldBe(3); } + [Fact(DisplayName = "可空枚举类型导入测试")] + public async Task NullableEnum_Test() + { + var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "NullableEnum.xlsx"); + var import = await Importer.Import(filePath); + import.HasError.ShouldBeFalse(); + } } } \ No newline at end of file diff --git a/src/Magicodes.ExporterAndImporter.Tests/Models/Import/NullableEnumTestImportDto.cs b/src/Magicodes.ExporterAndImporter.Tests/Models/Import/NullableEnumTestImportDto.cs new file mode 100644 index 00000000..8fdf91a2 --- /dev/null +++ b/src/Magicodes.ExporterAndImporter.Tests/Models/Import/NullableEnumTestImportDto.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Magicodes.ExporterAndImporter.Core; + +namespace Magicodes.IE.Tests.Models.Import; +/// +/// 可空枚举问题测试 +/// +public class NullableEnumTestImportDto +{ + /// + /// 编号 + /// + [ImporterHeader(Name = "编号")] + public string No { get; set; } + /// + /// 等级 + /// + [ImporterHeader(Name = "等级")] + public EnumTest? Level { get; set; } +} +public enum EnumTest +{ + A, + B, +} \ No newline at end of file diff --git a/src/Magicodes.ExporterAndImporter.Tests/TestFiles/Import/NullableEnum.xlsx b/src/Magicodes.ExporterAndImporter.Tests/TestFiles/Import/NullableEnum.xlsx new file mode 100644 index 00000000..6b9bf957 Binary files /dev/null and b/src/Magicodes.ExporterAndImporter.Tests/TestFiles/Import/NullableEnum.xlsx differ