TypeExtensions.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.Reflection;
  2. using ClosedXML.Excel;
  3. namespace ExcelORM;
  4. // Borrowed from https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLCellValue.cs#L361
  5. public static class TypeExtensions
  6. {
  7. private static object? ToObject(this XLCellValue value)
  8. {
  9. return value.Type switch
  10. {
  11. XLDataType.Blank => null,
  12. XLDataType.Boolean => value.GetBoolean(),
  13. XLDataType.Number => value.GetNumber(),
  14. XLDataType.Text => value.GetText(),
  15. XLDataType.Error => value.GetError(),
  16. XLDataType.DateTime => value.GetDateTime(),
  17. XLDataType.TimeSpan => value.GetTimeSpan(),
  18. _ => throw new InvalidCastException()
  19. };
  20. }
  21. public static void SetPropertyValue<T>(this T currentObject, PropertyInfo property, XLCellValue value)
  22. {
  23. var valueToSet = value.ToObject();
  24. if (valueToSet == null) return;
  25. try
  26. {
  27. property.SetValue(currentObject, valueToSet);
  28. }
  29. catch
  30. {
  31. valueToSet = value.ToString();
  32. property.SetValue(currentObject, valueToSet);
  33. }
  34. }
  35. }