将List数据导出为Excel

 

 1 /// <summary>
 2         /// list导出为Excel
 3         /// </summary>
 4         /// <param name="list"></param>
 5         /// <param name="filePath"></param>
 6         public static void ListDataExport<T>(List<T> list, string filePath)
 7         {
 8             if (list.Count <= 0)
 9             {
10                 return;
11             }
12             //检查文件夹是否存在
13             string dir = Path.GetDirectoryName(filePath);
14             if (!Directory.Exists(dir))
15                 Directory.CreateDirectory(dir);
16             
17             IWorkbook workbook = new XSSFWorkbook();
//用于创建文件
18 using FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate); 19 //创建工作表 20 ISheet sheet = workbook.CreateSheet();
//创建单元格格式
21 ICellStyle style = workbook.CreateCellStyle(); 22 style.BorderBottom = BorderStyle.Thin;//下边框 23 style.BorderLeft = BorderStyle.Thin; 24 style.BorderRight = BorderStyle.Thin; 25 style.BorderTop = BorderStyle.Thin; 26 style.Alignment = HorizontalAlignment.Center;//水平居中 27 style.VerticalAlignment = VerticalAlignment.Center;//垂直居中 28 int rowNo = 0;
//创建表头 第一行
29 IRow row0 = sheet.CreateRow(0); 30 var entity = list[0].GetType(); 31 PropertyInfo[] piList = entity.GetProperties(); 32 List<PropertyInfo> newlist = new(); 33 foreach (PropertyInfo pi in piList) 34 { 35 //针对特性 [Description("申请单号")] 36 string des = ((DescriptionAttribute)Attribute.GetCustomAttribute(pi, typeof(DescriptionAttribute)))?.Description ?? null; 37 if (des == null) 38 continue; 39 newlist.Add(pi);
//行创建列
40 ICell cell = row0.CreateCell(rowNo); 41 cell.SetCellValue(des);//给单元格赋值 42 cell.CellStyle = style;//给单元格赋格式 43 rowNo++; 44 } 45 rowNo = 1; 46 foreach (var v in list) 47 { 48 IRow row = sheet.CreateRow(rowNo); 49 for (int i = 0; i < newlist.Count; i++) 50 { 51 object value = newlist[i].GetMethod.Invoke(v, null); 52 ICell celldata = row.CreateCell(i); 53 celldata.SetCellValue(value == null ? "" : value.ToString()); 54 celldata.CellStyle = style; 55 } 56 rowNo++; 57 } 58 workbook.Write(fileStream); 59 workbook.Close(); 60 }

 

posted @ 2022-06-07 17:22  进击的黑大帅  阅读(104)  评论(0编辑  收藏  举报