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 }