List<T>导出表格

/// <summary>
        /// 导出excle文件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="filePath"></param>
        /// <param name="sheetName"></param>
        public static void WriteExcel<T>(List<T> list, string filePath, string sheetName)
        {
            try
            {
                if (!string.IsNullOrEmpty(filePath) && null != list && list.Count > 0)
                {
                    NPOI.SS.UserModel.IWorkbook book;
                    NPOI.SS.UserModel.ISheet sheet;
                    if (filePath.EndsWith(".xlsx"))
                    {
                        book = new NPOI.XSSF.UserModel.XSSFWorkbook();
                        sheet = book.CreateSheet(sheetName);
                    }
                    else
                    {
                        book = new NPOI.HSSF.UserModel.HSSFWorkbook();
                        sheet = book.CreateSheet(sheetName);
                    }
                    NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
                    Type itemType = typeof(T);
                    System.Reflection.PropertyInfo[] itemPropertyies = itemType.GetProperties();
                    for (int i = 0; i < itemPropertyies.Length; i++)
                    {
                        var attribute = itemPropertyies[i].GetCustomAttributes(typeof(DisplayNameAttribute), true).Cast<DisplayNameAttribute>().Single();
                        row.CreateCell(i).SetCellValue(attribute.DisplayName);
                    }
                    for (int i = 0; i < list.Count; i++)
                    {
                        NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);
                        for (int j = 0; j < itemPropertyies.Length; j++)
                        {

                            row2.CreateCell(j).SetCellValue(Convert.ToString(itemPropertyies[j].GetValue(list[i])));
                        }
                    }
                    // 写入到客户端  
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                    {
                        book.Write(ms);
                        using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
                        {
                            byte[] data = ms.ToArray();
                            fs.Write(data, 0, data.Length);
                            fs.Flush();
                        }
                        book = null;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("写入excel时报错:" + ex.Message);
            }
        }

 

posted @ 2018-01-16 11:00  幸运的程序员  阅读(493)  评论(0编辑  收藏  举报