将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 }