Magicodes.IE icon indicating copy to clipboard operation
Magicodes.IE copied to clipboard

如何自定义导出表头顺序?

Open BrainK-1400 opened this issue 3 years ago • 4 comments

A B C
1 2 3
4 5 6

根据某些规则达到

A C B
1 3 4
4 6 5

BrainK-1400 avatar Feb 22 '22 11:02 BrainK-1400

可以参考以下代码:

    [ExcelExporter(Name = "测试", TableStyle = TableStyles.Dark10, AutoFitAllColumn = true, AutoFitMaxRows = 5000)]
    public class ExportTestDataWithAttrs
    {
        /// <summary>
        /// Text:索引10
        /// </summary>
        [ExporterHeader(DisplayName = "加粗文本", IsBold = true, ColumnIndex = 10, WrapText = true)]
        public string Text { get; set; }
        /// <summary>
        /// Text2:索引1
        /// </summary>
        [ExporterHeader(DisplayName = "普通文本", ColumnIndex = 1, Hidden = true)]
        public string Text2 { get; set; }
        /// <summary>
        /// Text3:索引2
        /// </summary>
        [ExporterHeader(DisplayName = "忽略", IsIgnore = true, ColumnIndex = 2)]
        public string Text3 { get; set; }
        /// <summary>
        /// Number:索引3
        /// </summary>
        [ExporterHeader(DisplayName = "数值", Format = "#,##0", ColumnIndex = 3)]
        public int Number { get; set; }

        [ExporterHeader(DisplayName = "名称", IsAutoFit = true)]
        public string Name { get; set; }

        /// <summary>
        /// 时间测试
        /// </summary>
        [ExporterHeader(DisplayName = "日期1", Format = "yyyy-MM-dd")]
        public DateTime Time1 { get; set; }

        /// <summary>
        /// 时间测试
        /// </summary>
        [ExporterHeader(DisplayName = "日期2", Format = "yyyy-MM-dd HH:mm:ss")]
        public DateTime? Time2 { get; set; }

        [ExporterHeader(Width = 100)]
        public DateTime Time3 { get; set; }

        public DateTime Time4 { get; set; }

        /// <summary>
        /// 长数值测试
        /// </summary>
        [ExporterHeader(DisplayName = "长数值", Format = "#,##0")]
        public long LongNo { get; set; }
    }

xin-lai avatar Feb 26 '22 09:02 xin-lai

可以参考以下代码:

    [ExcelExporter(Name = "测试", TableStyle = TableStyles.Dark10, AutoFitAllColumn = true, AutoFitMaxRows = 5000)]
    public class ExportTestDataWithAttrs
    {
        /// <summary>
        /// Text:索引10
        /// </summary>
        [ExporterHeader(DisplayName = "加粗文本", IsBold = true, ColumnIndex = 10, WrapText = true)]
        public string Text { get; set; }
        /// <summary>
        /// Text2:索引1
        /// </summary>
        [ExporterHeader(DisplayName = "普通文本", ColumnIndex = 1, Hidden = true)]
        public string Text2 { get; set; }
        /// <summary>
        /// Text3:索引2
        /// </summary>
        [ExporterHeader(DisplayName = "忽略", IsIgnore = true, ColumnIndex = 2)]
        public string Text3 { get; set; }
        /// <summary>
        /// Number:索引3
        /// </summary>
        [ExporterHeader(DisplayName = "数值", Format = "#,##0", ColumnIndex = 3)]
        public int Number { get; set; }

        [ExporterHeader(DisplayName = "名称", IsAutoFit = true)]
        public string Name { get; set; }

        /// <summary>
        /// 时间测试
        /// </summary>
        [ExporterHeader(DisplayName = "日期1", Format = "yyyy-MM-dd")]
        public DateTime Time1 { get; set; }

        /// <summary>
        /// 时间测试
        /// </summary>
        [ExporterHeader(DisplayName = "日期2", Format = "yyyy-MM-dd HH:mm:ss")]
        public DateTime? Time2 { get; set; }

        [ExporterHeader(Width = 100)]
        public DateTime Time3 { get; set; }

        public DateTime Time4 { get; set; }

        /// <summary>
        /// 长数值测试
        /// </summary>
        [ExporterHeader(DisplayName = "长数值", Format = "#,##0")]
        public long LongNo { get; set; }
    }

这个是写死在特性ColumnIndex里了,如何动态修改顺序呢?

BrainK-1400 avatar Mar 15 '22 07:03 BrainK-1400

我实现的方式是:先转换为DataTable,然后设置DataTable列的顺序,然后再导出。

wayne2006 avatar Apr 01 '22 11:04 wayne2006

我实现的方式是:先转换为DataTable,然后设置DataTable列的顺序,然后再导出。

我也是,但是这样特性就失效了。。

BrainK-1400 avatar Apr 11 '22 06:04 BrainK-1400