zoukankan      html  css  js  c++  java
  • C#导出Excel表格方法

    using NPOI.SS.UserModel;
    using NPOI.XSSF.UserModel;
    using NPOI.SS.Formula.Functions;
    using System.Reflection;
    using System.IO;
    
    public class Exportmethod
        {
            /// <summary>
            /// 导出Excel表格
            /// </summary>
            /// <typeparam name="T">数据类型</typeparam>
            /// <param name="listEntity"></param>
            /// <returns></returns>
            public static byte[] Output<T>(List<T> listEntity) where T : class
            {
                Type entityType = (listEntity?.FirstOrDefault()).GetType();
                IWorkbook workbook = new XSSFWorkbook();
                ISheet sheet = workbook.CreateSheet("sheet");
                var scd = typeof(System.ComponentModel.DisplayNameAttribute);
                var entityProperties = entityType.GetProperties().Where(item => item.GetCustomAttribute(scd) != null).ToList();
                IRow Title = sheet.CreateRow(0);
                IRow rows = null;
    
            
                for (int i = 0; i < listEntity.Count; i++)
                {
                    var dbitem = listEntity[i];
                    rows = sheet.CreateRow(i+1);
                    for (int j = 0; j < entityProperties.Count; j++)
                    {
                        var prop = entityProperties[j];
                        if (i == 0)
                        {
                  //表头赋值
                            var display = prop.GetCustomAttribute(scd) as System.ComponentModel.DisplayNameAttribute;
                            Title.CreateCell(j).SetCellValue(display.DisplayName);
                            
                        }
                //表格数据
                        var value = prop.GetValue(dbitem)?.ToString();
                        rows.CreateCell(j).SetCellValue(value ?? "");
                    }
                }
    
                using (MemoryStream ms = new MemoryStream())
                {
                    workbook.Write(ms);
                    return ms.GetBuffer();
                }
            }

    下面是实体模型,需要在前面加DisplayName,这样做的意义是有多少就生成多少列

     /// <summary>
        /// 视图模型
        /// </summary>
        public class QueryListDataDto
        {
            /// <summary>
            /// ID
            /// </summary>
            [DisplayName("编号")]
            public int Id { get; set; }
    
            /// <summary>
            /// 名称
            /// </summary>
            [DisplayName("名称")]
            public string Name { get; set; }
    
            /// <summary>
            /// 说明
            /// </summary>
            [DisplayName("说明")]
            public string Description { get; set; }

    条件:需要NPOI包

  • 相关阅读:
    常用DOS命令大全2
    常用DOS命令大全1
    2020年3月13日Java面试记录
    MySQL Transaction--Sprint中访问只读从库的设置
    MySQL Transaction--TPS计算规则
    MySQL Inport--导入数据
    MySQL Export--导出数据
    MySQL--InnoDB并发线程控制
    MySQL--线程池(Thread Pool)
    MySQL 5.7--复制延迟监控
  • 原文地址:https://www.cnblogs.com/haixiaocan/p/10524707.html
Copyright © 2011-2022 走看看