MiniExcel
MiniExcel copied to clipboard
希望可以支持,值的自定义转换器,嵌套的实体(实体属性可以为另一个实体),分别控制忽略读取和忽略写入
1.使用自定义转换器读写Excel (我们有时候需要从excel读取数据处理成一个复杂类型,写入时再转换为简单数据)
public class ExcelColumnAttribute : Attribute
{
/// <summary>
/// Excel列值转换器
/// </summary>
public IValueConverter Converter { get; set; } = IValueConverter.Defualt;
}
/// <summary>
/// Excel列值转换器
/// </summary>
public interface IValueConverter
{
/// <summary>
/// 转换从excel中读取的值
/// </summary>
object Read(object cell);
/// <summary>
/// 转换将写入excel的值
/// </summary>
object Write(object instance);
/// <summary>
/// 默认转换器
/// </summary>
static IValueConverter Defualt { get; } = new DefualtConverter();
/// <summary>
/// Excel值默认转换器
/// </summary>
class DefualtConverter : IValueConverter
{
public object Read(object cell) => cell;
public object Write(object instance) => instance;
}
}
/// <summary>
/// Excel列值转换器
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IValueConverter<T> : IValueConverter
{
new T Read(object cell);
object Write(T instance);
}
2.嵌套的实体(实体属性可以为另一个实体) 读写Excel
class Student
{
[ExcelColumn(Name = "姓名")]
public string Name { get; set; }
[ExcelColumn(Name = "年龄")]
public int Age { get; set; }
public Info Info { get; set; }
}
class Info
{
[ExcelColumn(Name = "备注")]
public string Remarks { get; set; }
...可能还有三层嵌套
}
3.支持分别控制忽略读取和忽略写入 (有些数据不能从Excel获取,以免造成BUG,但是需要导出)
public class ExcelColumnAttribute : Attribute
{
///不从指定列中读取
/// </summary>
public bool IgnoreRead { get; set; }
/// <summary>
///不从指定列中写入
/// </summary>
public bool IgnoretWrite { get; set; }
}
需求挺好作者视而不见,其实代码不是很复杂
可以自己改造再提合并请求