• 利用反射自定义导出


            /// <summary>
            /// 自定义列导出 
            /// </summary>
            /// <param name="sheetName">sheet名</param>
            /// <param name="title">标题</param>
            /// <param name="columns">自定义列 字段名</param>
            /// <param name="tList">对象集合</param>
            /// <param name="path">保存路径</param>
            public static void ExportCom<T>(string sheetName, string title, string columns, List<T> tList, string path) where T:new ()
            {
    
                IWorkbook workbook = new HSSFWorkbook();
                ISheet sheet = workbook.CreateSheet(sheetName);
    
                ICellStyle style = workbook.CreateCellStyle();
                //设置单元格的样式:水平对齐居中
                style.Alignment = HorizontalAlignment.CENTER;
                //新建一个字体样式对象
    
                IFont font = workbook.CreateFont();
                //设置字体加粗样式
                font.Boldweight = short.MaxValue;
                font.FontHeight = 300;
                //使用SetFont方法将字体样式添加到单元格样式中 
                style.SetFont(font);
    
                var colArr = columns.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
    
                IRow rowtitle = sheet.CreateRow(0);
                rowtitle.Height = 30 * 20;
                ICell cellTitle = rowtitle.CreateCell(0);
    
                IRow row1 = sheet.CreateRow(1);
                row1.Height = 20 * 20;
    
                int emp = 0;
                //列 中文
                for (int i = 0; i < colArr.Count(); i++)
                {
                    var colName = GetNameByColumn(colArr[i]);
                    if (!string.IsNullOrEmpty(colName))
                    {
                        ICell cellYmw = row1.CreateCell(i - emp);
                        cellYmw.SetCellValue(colName);
                    }
                    else
                    {
                        emp++;
                    }
                }
                //标题栏
                cellTitle.SetCellValue(title + DateTime.Now.ToString("yyyyMMddHHmmss"));
                cellTitle.CellStyle = style;
                sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, colArr.Length - emp));
    
                //
                for (int i = 0; i < tList.Count; i++)
                {
    
                    IRow row = sheet.CreateRow(i + 2);
                    int ept = 0;
                    for (int j = 0; j < colArr.Count(); j++)
                    {
                        var colName = GetNameByColumnCom<T>(colArr[j]);
                        if (!string.IsNullOrEmpty(colName))
                        {
                            var obj = ObjValueCom<T>(colArr[j], tList[i]);
                            ICell cellName = row.CreateCell(j - ept);
                            cellName.SetCellValue(obj);
                        }
                        else
                        {
                            ept++;
                        }
    
                    }
                }
    
                FileStream file = new FileStream(path, FileMode.OpenOrCreate);
                workbook.Write(file);
                file.Flush();
                file.Close();
    
            }
    
    
            /// <summary>
            /// 根据列名获取列值
            /// </summary>
            /// <param name="colName"></param>
            /// <param name="item"></param>
            /// <returns></returns>
            public static string ObjValueCom<T>(string colName, T item) where T : new()
            {
                object obj = "";
                Type type = typeof(T);
                var proInfo = type.GetProperty(colName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
                if (proInfo != null)
                {
                    obj = proInfo.GetValue(item, null);
                }
                return obj.ToString();
            }
    
            /// <summary>
            /// 根据列名 得到对应列注释 对应类必须有注释
            /// </summary>
            /// <param name="colName"></param>
            /// <returns></returns>
            public static string GetNameByColumnCom<T>(string colName)
            {
                string proName = "";
    
                var protityes =
                    typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
    
                foreach (var prperoty in protityes)
                {
                    object[] objs = prperoty.GetCustomAttributes(typeof(DescriptionAttribute), true);
                    if (prperoty.Name == colName)
                    {
                        proName = ((DescriptionAttribute)objs[0]).Description;
                    }
                }
    
                return proName;
            }
  • 相关阅读:
    .net GC的工作原理
    ISAPI的作用ASP.NET的HTTP请求的处理方法
    进程和线程
    浅论ViewState及其与Session的关系
    堆和栈的区别
    关于system.resources名称空间引用的问题
    多线程和多进程
    HTTP 状态码含义
    WebView 载入本地的html
    Intentfilter的介绍
  • 原文地址:https://www.cnblogs.com/kunlunmountain/p/6795815.html
Copyright © 2020-2023  润新知