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包

  • 相关阅读:
    yii分页
    ajax分页
    批删,全选
    网站开发的愿景
    margin collapse 坍塌
    URI URL URN
    Servlet
    Http请求
    进程间通信
    网络编程
  • 原文地址:https://www.cnblogs.com/haixiaocan/p/10524707.html
Copyright © 2011-2022 走看看