随笔 - 56  文章 - 0  评论 - 0  阅读 - 12858

Net 按照列名的自定义顺序导出Excel

  • 第一步

    • 定义导出Excel的表头一个特性,继承自Attribute,包含列头的名字和列的顺序
    public class ExportHeaderAttribute : Attribute
    {
    public ExportHeaderAttribute(string name) : this(name, -1) { }
    public ExportHeaderAttribute(string name, short order)
    {
    Name = name;
    Order = order;
    }
    /// <summary>
    /// 列名称
    /// </summary>
    public string Name { get; }
    /// <summary>
    /// 列顺序
    /// </summary>
    public short Order { get; }
    }
  • 第二步

    • 在导出的Excel上面对应的model添加特性
    public class ExportModel
    {
    /// <summary>
    /// 宽度
    /// </summary>
    [ExportHeader("宽度", 1)]
    public decimal? Width { get; set; }
    /// <summary>
    /// 长度
    /// </summary>
    [ExportHeader("长度", 2)]
    public decimal? Length { get; set; }
    /// <summary>
    /// 数量
    /// </summary>
    [ExportHeader("数量",3)]
    public decimal? Count { get; set; }
    /// <summary>
    /// 重量
    /// </summary>
    [ExportHeader("重量", 4)]
    public decimal? Weight { get; set; }
    }
  • 第三步

    • 获取导出的model,并且按照特性排序
    var properties = typeof(T).GetProperties();
    var columns = properties.Select(x => new ColumnEntry
    {
    Property = x,
    Header = x.GetCustomAttribute<ExportHeaderAttribute>()
    })
    .Where(x => x.Header != null)
    .OrderBy(x => x.Header.Order)
    .ToList();
    public class ColumnEntry
    {
    public PropertyInfo Property { get; set; }
    public ExportHeaderAttribute Header { get; set; }
    }
  • 后面就是实际导出Excel的方法了,请自行参考

posted on   Jeffrey~~  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示