C#调用NPOI组件导出Excel表格

把一个List集合的数据导出到Excel表格中

     public static string RenderToExcel<T>(List<T> datas)
        {
            MemoryStream ms = new MemoryStream();
            IWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("导出数据");
            IRow headerRow = sheet.CreateRow(0);

            int rowIndex = 1, piIndex = 0;
            Type type = typeof(T);
            var pis = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
                .Where(i => i.PropertyType.IsValueType || i.PropertyType == typeof(string));

            string displayName = string.Empty;
            foreach (var pi in pis)
            {
                if (pi.GetCustomAttribute<NotExportAttribute>() != null)
                {
                    piIndex++;
                    continue;
                }
                //需要类反射出字段属性名
                displayName = pi.GetCustomAttribute<DisplayNameAttribute>().DisplayName;
                if (!displayName.Equals(string.Empty))
                {//如果该属性指定了DisplayName,则输出  
                    try
                    {
                        headerRow.CreateCell(piIndex).SetCellValue(displayName);
                    }
                    catch (Exception)
                    {
                        headerRow.CreateCell(piIndex).SetCellValue("");
                    }
                }
                piIndex++;
            }
            foreach (T data in datas)
            {
                piIndex = 0;
                IRow dataRow = sheet.CreateRow(rowIndex);
                foreach (var pi in pis)
                {
                    if (pi.GetCustomAttribute<NotExportAttribute>() != null)
                    {
                        piIndex++;
                        continue;
                    }
                    try
                    {
                        dataRow.CreateCell(piIndex).SetCellValue(pi.GetValue(data, null).ToString());
                    }
                    catch (Exception)
                    {
                        dataRow.CreateCell(piIndex).SetCellValue("");
                    }
                    piIndex++;
                }
                rowIndex++;
            }
            workbook.Write(ms);
            string strFileName = Guid.NewGuid().ToString() + ".xls";
            string strFilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\ExcelFile\\" + strFileName; ; //Server.MapPath("ExcelFile\\") + "\\" + System.DateTime.Now.ToString() + ".xls";
            FileStream dumpFile = new FileStream(strFilePath, FileMode.Create, FileAccess.ReadWrite);
            ms.WriteTo(dumpFile);
            ms.Flush();
            ms.Position = 0;
            dumpFile.Close();
            return strFileName;
        }

上面代码中第一个foreach是遍历list中类型的特性并获取给特性中的内容,作为Excel表格的第一行内容

第二个foreach遍历list列表中的数据填充到Excel表格下面

然后保存这个Excel

其中需要创建NotExportAttribute类

    [AttributeUsage(AttributeTargets.Property)]
    public class NotExportAttribute : Attribute
    {
     }

数据实体需要加上DisplayName特性

    public class Student
    {
        [DisplayName("学生的ID")]
        public int StudentID { get; set; }
        [DisplayName("学生姓名")]
        public string Name { get; set; }
        [DisplayName("学生的年龄")]
        public int Age { get; set; }
        /// <summary>
        /// 1男2女3未设置
        /// </summary>
        [DisplayName("学生的性别")]
        public int Gender { get; set; }

    }

 

posted @ 2016-05-04 11:05  乔安生  阅读(828)  评论(1编辑  收藏  举报