Bladeren bron

Handling more number types

Piotr Czajkowski 4 dagen geleden
bovenliggende
commit
64bb722207

+ 3 - 3
ExcelORM/ExcelORM/ExcelORM.csproj

@@ -4,7 +4,7 @@
         <TargetFramework>net8.0</TargetFramework>
         <ImplicitUsings>enable</ImplicitUsings>
         <Nullable>enable</Nullable>
-        <Version>2.7.0</Version>
+        <Version>2.8.0</Version>
         <PackageProjectUrl>https://git.liox.eu/pczajkowski/ExcelORM</PackageProjectUrl>
         <RepositoryUrl>https://github.com/pczajkowski/ExcelORM</RepositoryUrl>
         <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
@@ -14,11 +14,11 @@
 	<Authors>Piotr Czajkowski</Authors>
 	<Description>Simple library to read/write C# objects from/to Excel files. </Description>
 	<RepositoryType>GitHub</RepositoryType>
-	<PackageReleaseNotes>Able to read enums and Guids.</PackageReleaseNotes>
+	<PackageReleaseNotes>Handling more number types.</PackageReleaseNotes>
     </PropertyGroup>
 
     <ItemGroup>
-	    <PackageReference Include="ClosedXML" Version="0.104.2" />
+	    <PackageReference Include="ClosedXML" Version="0.105.0" />
 	    <None Include="../../README.md" Pack="true" PackagePath="\" />
 	    <None Include="../../LICENSE" Pack="true" PackagePath="" />
     </ItemGroup>

+ 22 - 1
ExcelORM/ExcelORM/TypeExtensions.cs

@@ -34,6 +34,27 @@ public static class TypeExtensions
         
         return value.GetText(); 
     }
+
+    private static object? GetSpecifiNumberType(XLCellValue value, PropertyInfo? property)
+    {
+        if (property == null) return value.GetNumber();
+        
+        if (property.PropertyType == typeof(int) || property.PropertyType == typeof(int?))
+        {
+            var number = value.GetNumber();
+            if (property.PropertyType == typeof(int?) && double.IsNaN(number)) return null;
+            return Convert.ToInt32(number);
+        }
+
+        if (property.PropertyType == typeof(decimal) || property.PropertyType == typeof(decimal?))
+        {
+            var number = value.GetNumber();
+            if (property.PropertyType == typeof(decimal?) && double.IsNaN(number)) return null;
+            return Convert.ToDecimal(number); 
+        }
+        
+        return value.GetNumber();
+    }
     
     // Borrowed from https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLCellValue.cs#L361
     public static object? ToObject(this XLCellValue value, PropertyInfo? property = null)
@@ -42,7 +63,7 @@ public static class TypeExtensions
         {
             XLDataType.Blank => null,
             XLDataType.Boolean => value.GetBoolean(),
-            XLDataType.Number => value.GetNumber(),
+            XLDataType.Number => GetSpecifiNumberType(value, property),
             XLDataType.Text => GetAdditionalTypeFromText(value, property),
             XLDataType.Error => value.GetError(),
             XLDataType.DateTime => value.GetDateTime(),

+ 2 - 2
ExcelORM/ExcelORMTests/ExcelORMTests.csproj

@@ -10,9 +10,9 @@
     </PropertyGroup>
 
     <ItemGroup>
-        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
+        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
         <PackageReference Include="xunit" Version="2.9.3" />
-        <PackageReference Include="xunit.runner.visualstudio" Version="3.0.2">
+        <PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
             <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
             <PrivateAssets>all</PrivateAssets>
         </PackageReference>

+ 1 - 1
ExcelORM/ExcelORMTests/TestTypes.cs

@@ -5,6 +5,6 @@ public record TestTypes
     public string? Text { get; set; }
     public DateTime? Date { get; set; }
     public TimeSpan? TimeSpan { get; set; }
-    public double? Int { get; set; }
+    public int? Int { get; set; }
     public double? Double { get; set; }
 }