/// <summary> /// Map property to a column by specified column index(zero-based) and property name. /// </summary> /// <typeparam name="T">The target object type.</typeparam> /// <param name="mapper">The <see cref="Mapper"/> object.</param> /// <param name="columnIndex">The column index.</param> /// <param name="propertyName">The property name.</param> /// <param name="exportedColumnName">The column name for export.</param> /// <param name="tryTake">The function try to import from cell value to the target object.</param> /// <param name="tryPut">The function try to export source object to the cell.</param> /// <returns>The mapper object.</returns> public static Zian.NpoiCore.Mapper.Mapper Map <T>(this Zian.NpoiCore.Mapper.Mapper mapper, ushort columnIndex, string propertyName, string exportedColumnName, Func <IColumnInfo, object, bool> tryTake = null, Func <IColumnInfo, object, bool> tryPut = null) { if (mapper == null) { throw new ArgumentNullException(nameof(mapper)); } if (propertyName == null) { throw new ArgumentNullException(nameof(propertyName)); } var type = typeof(T); var pi = type.GetProperty(propertyName, MapHelper.BindingFlag); if (pi == null && type != typeof(object)) { throw new InvalidOperationException($"Cannot find a public property in name of '{propertyName}'."); } var columnAttribute = new ColumnAttribute { Property = pi, PropertyName = propertyName, Index = columnIndex, Name = exportedColumnName, TryPut = tryPut, TryTake = tryTake, Ignored = false }; return(mapper.Map(columnAttribute)); }
/// <summary> /// Map property to a column by specified column index(zero-based) and property selector. /// </summary> /// <typeparam name="T">The target object type.</typeparam> /// <param name="mapper">The <see cref="Mapper"/> object.</param> /// <param name="columnIndex">The column index.</param> /// <param name="propertySelector">Property selector.</param> /// <param name="exportedColumnName">The column name for export.</param> /// <param name="tryTake">The function try to import from cell value to the target object.</param> /// <param name="tryPut">The function try to export source object to the cell.</param> /// <returns>The mapper object.</returns> public static Zian.NpoiCore.Mapper.Mapper Map <T>(this Zian.NpoiCore.Mapper.Mapper mapper, ushort columnIndex, Expression <Func <T, object> > propertySelector, string exportedColumnName, Func <IColumnInfo, object, bool> tryTake = null, Func <IColumnInfo, object, bool> tryPut = null) { if (mapper == null) { throw new ArgumentNullException(nameof(mapper)); } var pi = MapHelper.GetPropertyInfoByExpression(propertySelector); if (pi == null) { throw new InvalidOperationException($"Cannot find the property specified by the selector."); } var columnAttribute = new ColumnAttribute { Property = pi, Index = columnIndex, Name = exportedColumnName, TryPut = tryPut, TryTake = tryTake, Ignored = false }; return(mapper.Map(columnAttribute)); }
/// <summary> /// Ignores all errors for the specified property. /// </summary> /// <param name="mapper">The <see cref="Mapper"/> object.</param> /// <param name="propertySelector">Property selector.</param> /// <returns>The mapper object.</returns> public static Zian.NpoiCore.Mapper.Mapper IgnoreErrorsFor <T>(this Zian.NpoiCore.Mapper.Mapper mapper, Expression <Func <T, object> > propertySelector) { var pi = MapHelper.GetPropertyInfoByExpression(propertySelector); if (pi == null) { throw new InvalidOperationException($"Cannot find the property specified by the selector."); } var columnAttribute = new ColumnAttribute { Property = pi, IgnoreErrors = true }; return(mapper.Map(columnAttribute)); }
/// <summary> /// Map property to a column by specified column index(zero-based) and property selector. /// </summary> /// <typeparam name="T">The target object type.</typeparam> /// <param name="mapper">The <see cref="Mapper"/> object.</param> /// <param name="columnIndex">The column index.</param> /// <param name="propertySelector">Property selector.</param> /// <param name="tryTake">The function try to import from cell value to the target object.</param> /// <param name="tryPut">The function try to export source object to the cell.</param> /// <returns>The mapper object.</returns> public static Zian.NpoiCore.Mapper.Mapper Map <T>(this Zian.NpoiCore.Mapper.Mapper mapper, ushort columnIndex, Expression <Func <T, object> > propertySelector, Func <IColumnInfo, object, bool> tryTake = null, Func <IColumnInfo, object, bool> tryPut = null) { if (mapper == null) { throw new ArgumentNullException(nameof(mapper)); } var pi = MapHelper.GetPropertyInfoByExpression(propertySelector); if (pi == null) { throw new InvalidOperationException($"Cannot find the property specified by the selector."); } return(mapper.Map(columnIndex, pi, tryTake, tryPut)); }
/// <summary> /// Uses a custom format for all properties that have the same type. /// </summary> /// <param name="mapper">The <see cref="Mapper"/> object.</param> /// <param name="propertyType">The type of property to format.</param> /// <param name="customFormat">The custom format for the specified type.</param> /// <returns>The <see cref="Mapper"/> itself.</returns> public static Zian.NpoiCore.Mapper.Mapper UseFormat(this Zian.NpoiCore.Mapper.Mapper mapper, Type propertyType, string customFormat) { if (mapper == null) { throw new ArgumentNullException(nameof(mapper)); } if (propertyType == null) { throw new ArgumentNullException(nameof(propertyType)); } if (string.IsNullOrWhiteSpace(customFormat)) { throw new ArgumentException($"Parameter '{nameof(customFormat)}' cannot be null or white space."); } mapper.TypeFormats[propertyType] = customFormat; return(mapper); }
/// <summary> /// Map property to a column by specified column index(zero-based). /// </summary> /// <param name="mapper">The <see cref="Mapper"/> object.</param> /// <param name="columnIndex">The column index.</param> /// <param name="propertyInfo">The <see cref="PropertyInfo"/> object.</param> /// <param name="tryTake">The function try to import from cell value to the target object.</param> /// <param name="tryPut">The function try to export source object to the cell.</param> /// <returns>The mapper object.</returns> public static Zian.NpoiCore.Mapper.Mapper Map(this Zian.NpoiCore.Mapper.Mapper mapper, ushort columnIndex, PropertyInfo propertyInfo, Func <IColumnInfo, object, bool> tryTake = null, Func <IColumnInfo, object, bool> tryPut = null) { if (propertyInfo == null) { throw new ArgumentNullException(nameof(propertyInfo)); } var columnAttribute = new ColumnAttribute { Property = propertyInfo, Index = columnIndex, TryPut = tryPut, TryTake = tryTake, Ignored = false }; return(mapper.Map(columnAttribute)); }
/// <summary> /// Ignore property by names. Ignored properties will not be mapped for import and export. /// </summary> /// <typeparam name="T">The target object type.</typeparam> /// <param name="mapper">The <see cref="Mapper"/> object.</param> /// <param name="propertyNames">Property names.</param> /// <returns>The mapper object.</returns> public static Zian.NpoiCore.Mapper.Mapper Ignore <T>(this Zian.NpoiCore.Mapper.Mapper mapper, params string[] propertyNames) { var type = typeof(T); foreach (var propertyName in propertyNames) { var pi = type.GetProperty(propertyName, MapHelper.BindingFlag); if (pi == null && type != typeof(object)) // Does not throw for dynamic type. { throw new InvalidOperationException($"Cannot find a public property in name of '{propertyName}'."); } var columnAttribute = new ColumnAttribute { Property = pi, PropertyName = propertyName, Ignored = true }; mapper.Map(columnAttribute); } return(mapper); }
/// <summary> /// Ignores all errors for the specified property. /// </summary> /// <param name="mapper">The <see cref="Mapper"/> object.</param> /// <param name="propertyName">The property name.</param> /// <returns>The mapper object.</returns> public static Zian.NpoiCore.Mapper.Mapper IgnoreErrorsFor <T>(this Zian.NpoiCore.Mapper.Mapper mapper, string propertyName) { if (propertyName == null) { throw new ArgumentNullException(nameof(propertyName)); } var type = typeof(T); var pi = type.GetProperty(propertyName, MapHelper.BindingFlag); if (pi == null && type != typeof(object)) { throw new InvalidOperationException($"Cannot find a public property in name of '{propertyName}'."); } var columnAttribute = new ColumnAttribute { Property = pi, PropertyName = propertyName, IgnoreErrors = true }; return(mapper.Map(columnAttribute)); }