public void ReadCell(ExcelRange cell,
                             object propertyOwner,
                             PropertyInfo targetProperty,
                             Func <PropertyAndOwnerInstance, bool> defaultShouldProcessCellDecision,
                             Func <ExcelRange, Type, PropertyAndOwnerInstance, IValueConverter, object> defaultConvertCellValueToType,
                             Action <PropertyAndOwnerInstance, object> defaultPropertySetter,
                             IValueConverter defaultValueConverter)
        {
            var pao = new PropertyAndOwnerInstance(targetProperty, propertyOwner);

            if (!defaultShouldProcessCellDecision(pao))
            {
                return;
            }

            var cellValue = defaultConvertCellValueToType(cell, targetProperty.PropertyType, pao, defaultValueConverter);

            if (cellValue != null)
            {
                defaultPropertySetter(pao, cellValue);
            }
        }
Example #2
0
        public void ReadCellValue(ExcelRange cell, object owner, PropertyInfo targetProperty, XlsxSerializerSettings settings)
        {
            if (ReflectionHelper.GetIsCollection(targetProperty.PropertyType, out var collectionItemType, true))
            {
                var collection = XlsCollectionDeserializerCore.DeserializeCollection(collectionItemType, cell.Worksheet,
                    () => Activator.CreateInstance(collectionItemType), cell.Start.Row - 1, cell.Start.Column - 1, settings).OfType<object>().ToList();

                ReflectionHelper.PopulateCollectionProperty(owner, targetProperty, collection);

                return;
            }

            var pao = new PropertyAndOwnerInstance(targetProperty, owner);

            Func<PropertyAndOwnerInstance, bool> defaultShouldProcessCellDecision = (p) => p.Property.CanWrite;

            Func<ExcelRange, Type, PropertyAndOwnerInstance, IValueConverter, object> defaultConvertCellValueToType = (cl, tp, p, converter) =>
            {
                var cellValue = cl.Value;
                if (cellValue == null)
                {
                    return null;
                }

                return converter.FromCellValue(tp, cellValue); 
            };

            Action<PropertyAndOwnerInstance, object> defaultPropertySetter = (p, v) => p.Property.SetValue(p.PropertyOwner, v);

            settings.CellReaderInterceptor.ReadCell(cell,
                owner,
                targetProperty,
                defaultShouldProcessCellDecision,
                defaultConvertCellValueToType,
                defaultPropertySetter,
                settings);
        }