|
@@ -1,3 +1,4 @@
|
|
|
|
|
+using System.Globalization;
|
|
|
using System.Reflection;
|
|
using System.Reflection;
|
|
|
using ClosedXML.Excel;
|
|
using ClosedXML.Excel;
|
|
|
using ExcelORM.Attributes;
|
|
using ExcelORM.Attributes;
|
|
@@ -34,6 +35,29 @@ public static class TypeExtensions
|
|
|
|
|
|
|
|
return value.GetText();
|
|
return value.GetText();
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private static object? GetSpecificNumberType(XLCellValue value, PropertyInfo? property)
|
|
|
|
|
+ {
|
|
|
|
|
+ var rawNumber = value.GetNumber();
|
|
|
|
|
+ if (property == null) return rawNumber;
|
|
|
|
|
+
|
|
|
|
|
+ var targetType = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;
|
|
|
|
|
+ if (!targetType.IsPrimitive && targetType != typeof(decimal)) return rawNumber;
|
|
|
|
|
+
|
|
|
|
|
+ try
|
|
|
|
|
+ {
|
|
|
|
|
+ return Convert.ChangeType(rawNumber, targetType, CultureInfo.InvariantCulture);
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (InvalidCastException)
|
|
|
|
|
+ {
|
|
|
|
|
+ return rawNumber;
|
|
|
|
|
+ }
|
|
|
|
|
+ catch (OverflowException)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (Nullable.GetUnderlyingType(property.PropertyType) != null) return null;
|
|
|
|
|
+ throw;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// Borrowed from https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLCellValue.cs#L361
|
|
// Borrowed from https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLCellValue.cs#L361
|
|
|
public static object? ToObject(this XLCellValue value, PropertyInfo? property = null)
|
|
public static object? ToObject(this XLCellValue value, PropertyInfo? property = null)
|
|
@@ -42,7 +66,7 @@ public static class TypeExtensions
|
|
|
{
|
|
{
|
|
|
XLDataType.Blank => null,
|
|
XLDataType.Blank => null,
|
|
|
XLDataType.Boolean => value.GetBoolean(),
|
|
XLDataType.Boolean => value.GetBoolean(),
|
|
|
- XLDataType.Number => value.GetNumber(),
|
|
|
|
|
|
|
+ XLDataType.Number => GetSpecificNumberType(value, property),
|
|
|
XLDataType.Text => GetAdditionalTypeFromText(value, property),
|
|
XLDataType.Text => GetAdditionalTypeFromText(value, property),
|
|
|
XLDataType.Error => value.GetError(),
|
|
XLDataType.Error => value.GetError(),
|
|
|
XLDataType.DateTime => value.GetDateTime(),
|
|
XLDataType.DateTime => value.GetDateTime(),
|