using System.Reflection; using ClosedXML.Excel; namespace ExcelORM; // Borrowed from https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLCellValue.cs#L361 public static class TypeExtensions { private static object? ToObject(this XLCellValue value) { return value.Type switch { XLDataType.Blank => null, XLDataType.Boolean => value.GetBoolean(), XLDataType.Number => value.GetNumber(), XLDataType.Text => value.GetText(), XLDataType.Error => value.GetError(), XLDataType.DateTime => value.GetDateTime(), XLDataType.TimeSpan => value.GetTimeSpan(), _ => throw new InvalidCastException() }; } public static void SetPropertyValue(this T currentObject, PropertyInfo property, XLCellValue value) { var valueToSet = value.ToObject(); if (valueToSet == null) return; try { property.SetValue(currentObject, valueToSet); } catch { valueToSet = value.ToString(); property.SetValue(currentObject, valueToSet); } } }