public static List <T> ToList <T>(this ExcelReference range, Func <T> factory = null) where T : class
        {
            var items = new List <T>();

            XLObjectMapper.AddRange(items, range.GetValue(), factory);
            return(items);
        }
        /// <summary>
        /// Directly load the the rows from a dbreader into a list of xlobjects
        /// Important: The order of the returned columns must match the one of T column mapping
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static List <T> ToXLObjectList <T>(this DbDataReader reader) where T : class
        {
            var  list = new List <T>();
            Type t    = typeof(T);
            var  map  = XLObjectMapper.GetObjectMapping <T>(null);

            while (reader.Read())
            {
                T instance = (t.GetConstructor(Type.EmptyTypes) != null) ? (T)Activator.CreateInstance(t, new object[0])
                            : Activator.CreateInstance <T>();
                int nFields = reader.FieldCount;

                for (int i = 0; i < nFields; i++)
                {
                    map.SetColumn(instance, i, reader.GetValue(i));
                }
                list.Add(instance);
            }
            return(list);
        }