MiniExcel icon indicating copy to clipboard operation
MiniExcel copied to clipboard

希望可以支持,值的自定义转换器,嵌套的实体(实体属性可以为另一个实体),分别控制忽略读取和忽略写入

Open zhuangState opened this issue 2 years ago • 2 comments

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; }
}

zhuangState avatar Oct 17 '22 03:10 zhuangState

需求挺好作者视而不见,其实代码不是很复杂

mchudie avatar Jan 10 '24 11:01 mchudie

可以自己改造再提合并请求

shaofing avatar May 11 '24 05:05 shaofing