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包

  • 相关阅读:
    SqlServer2008 / SqlServer2012 禁用windows登录,sa忘记密码或密码过期如何登陆
    windows下批处理保留指定日期下的文件
    centos7上使用git clone出现问题
    VS2015编译Teamtalk的Windows客户端(转)
    Mac Book触摸板失灵的解决办法(触摸板按下失灵)
    系统设计原则
    命令“regsvr32 /s /n /i:user "XXXXXX"”已退出,代码为 3
    Android实现开机自动运行程序
    Java并发之CyclicBarrier、CountDownLatch、Phaser
    Java多线程之ThreadLocal
  • 原文地址:https://www.cnblogs.com/haixiaocan/p/10524707.html
Copyright © 2011-2022 走看看